如何在maven antrun插件中输入任务

时间:2015-08-11 14:56:41

标签: maven input release maven-antrun-plugin external-script

我创建了一个maven项目,并且我试图运行外部脚本。 在这个外部脚本中,我使用read命令提出问题并得到答案。

如果我使用exec-maven-plugin

执行 sudo mvn package ,它会有效

但是,但是,但是:

  • 如果我执行了 sudo mvn package ,我的脚本就不会停止读取命令。
  • 如果我使用exec-maven-plugin执行 sudo mvn release:prepare ,我的脚本不会在读取命令时停止。
  • 如果我使用maven-antrun-plugin执行 sudo mvn release:prepare ,我的脚本就不会停止读取命令。

显然,我需要做一个发布:)

我试图用其他语法更改我的脚本的第一行(#/ usr / bin / bash,sh,...)...

有人有解决方案可以帮助我吗?

这是我的pom.xml的相关部分

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.8</version>
  <executions>
    <execution>
      <id>initialisation</id>
      <phase>initialize</phase>
      <configuration>
        <tasks>
        <exec dir="${project.basedir}" executable="${project.basedir}/livraison/outils/0_init_livraison.ksh" failonerror="true">
          <arg line="${project.name} ${project.version} ${ancienneVersion}" />
        </exec>
       </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>

这是我的0_init_livraison.ksh的有关部分

#!/bin/ksh

echo -e "| EXECUTION DU SCIPT generation_livrable.ksh \n"

echo "SHELL : $SHELL"
boucle="boucler"
while [ $boucle -eq "boucler" ]
do
    echo -ne "  Souhaitez-vous forcer la procedure (oui/non)? "
    read rep1

    case "$rep1" in
    o|O|y|Y|oui|Oui|OUI|yes|Yes|YES)
    echo ""
    break
    ;;

    n|N|non|Non|NON|no|No|NO)
    echo -e "  Abandon de la procedure..."
    boucle=""
    exit 1
    ;;
    *) 
    echo -e "  Reponse incomprehensible.\c"
    esac
done

当我执行sudo mvn包时,我的控制台的最后一行(然后,没有任何反应。由于无限循环,它似乎被阻止了)

[INFO] --- maven-antrun-plugin:1.8:run (initialisation) @ MyProject---
[WARNING] Parameter tasks is deprecated, use target instead
[INFO] Executing tasks

main:
   [exec] | EXECUTION DU SCIPT generation_livrable.ksh
   [exec]
   [exec] SHELL : /bin/bash

感谢阅读:)

编辑:

我尝试使用maven-antrun-plugin属性。 但我有一个类似的问题:antrun input task doesn't work during mvn release:prepare operation

2 个答案:

答案 0 :(得分:0)

EITHER

设置环境变量ANT_HOME,为Maven添加一个属性: <property name="ant.home" value="${env.ANT_HOME}" />并在Ant Exec部件中添加参数vmlauncher="true"

OR

执行ksh而不是脚本名称,脚本作为参数。我的意思是:

<exec dir="${project.basedir}" executable="ksh" failonerror="true">
<arg value="${project.basedir}/livraison/outils/0_init_livraison.ksh">
</exec>

答案 1 :(得分:0)

我尝试使用Exec ksh而不是脚本名称,脚本作为参数,但它没有用。 我试图设置ANT_HOME变量,但它没有用。

但我改变了我的思维方式: 拥有依赖于控制台的构建是非常有问题的,围绕Maven的大多数集成工具都无法使用它,因为它们假定自主运行。这种maven项目会遇到Jenkins,Netbeans的问题......他们不能等待手动回答。

最好的方法是设置一个选项并使用参数运行命令:

mvn clean packge -Dforcer = oui mvn release:prepare -Darguments = -Dforcer = oui

这是我的pom.xml的一部分:

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.8</version>
  <executions>
    <execution>
      <id>initialisation</id>
      <phase>initialize</phase>
      <configuration>
        <tasks>
          <exec executable="${outilsLivraison}/0_init_livraison.ksh" failonerror="false" resultproperty="codeRetour">
            <redirector errorproperty="message.redirector.err" />
          </exec>
          <fail message=" ARRET DE LA PROCEDURE ! VOUS POUVEZ FORCER LA PROCEDURE AVEC '-Dforcer=oui' (ou '-Darguments=-Dforcer=oui' pour une release).">
            <condition>
              <and>
                <equals arg1="${message.redirector.err}" arg2="warning" />
                <not><equals arg1="${forcer}" arg2="oui" /></not>
              </and>
            </condition>
          </fail>
          <fail message=" Erreur">
            <condition>
              <equals arg1="${codeRetour}" arg2="1" />
            </condition>
          </fail>
        </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>

这是在检测到问题时在我的0_init_livraison.ksh脚本中调用的函数:

fonc_warning(){
  echo "warning" 1>&2
}

所以我的问题解决了。

无论如何,谢谢您的建议:)