如何在 maven antrun 插件中执行输入任务
How to do input task in maven antrun plugin
我创建了一个 Maven 项目,我正在尝试 运行 一个外部脚本。
在这个外部脚本中,我使用 read 命令提出问题并获得答案。
如果我使用 exec-maven-plugin
执行 sudo mvn package 它会起作用
但是,但是,但是 :
- 如果我执行 sudo mvn package,我的脚本不会在读取命令处停止。
- 如果我使用 exec-maven-plugin 执行 sudo mvn release:prepare,我的脚本不会在读取命令时停止。
- 如果我使用 maven-ant运行-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 package 时我控制台的最后几行(然后,没有任何反应。它似乎因为无限 while 循环而被阻塞)
[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-ant运行-plugin 一起使用。
但我有一个类似的问题:antrun input task doesn't work during mvn release:prepare operation
任一个
设置环境变量ANT_HOME,给你的Maven添加一个属性:
<property name="ant.home" value="${env.ANT_HOME}" />
并将参数 vmlauncher="true"
添加到 Ant Exec 部分。
或
Exec ksh
而不是脚本名称,并将脚本作为参数。我的意思是:
<exec dir="${project.basedir}" executable="ksh" failonerror="true">
<arg value="${project.basedir}/livraison/outils/0_init_livraison.ksh">
</exec>
我尝试使用 Exec ksh 而不是脚本名称并将脚本作为参数,但它没有用。
我尝试设置 ANT_HOME 变量,但没有成功。
但是我改变了想法:
拥有依赖于控制台的构建是非常有问题的,Maven 周围的大多数集成工具都无法使用它,因为它们假设自治 运行s。这种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
}
这样我的问题就解决了
无论如何,谢谢你的建议:)
我创建了一个 Maven 项目,我正在尝试 运行 一个外部脚本。 在这个外部脚本中,我使用 read 命令提出问题并获得答案。
如果我使用 exec-maven-plugin
执行 sudo mvn package 它会起作用但是,但是,但是 :
- 如果我执行 sudo mvn package,我的脚本不会在读取命令处停止。
- 如果我使用 exec-maven-plugin 执行 sudo mvn release:prepare,我的脚本不会在读取命令时停止。
- 如果我使用 maven-ant运行-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 package 时我控制台的最后几行(然后,没有任何反应。它似乎因为无限 while 循环而被阻塞)
[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-ant运行-plugin 一起使用。 但我有一个类似的问题:antrun input task doesn't work during mvn release:prepare operation
任一个
设置环境变量ANT_HOME,给你的Maven添加一个属性:
<property name="ant.home" value="${env.ANT_HOME}" />
并将参数 vmlauncher="true"
添加到 Ant Exec 部分。
或
Exec ksh
而不是脚本名称,并将脚本作为参数。我的意思是:
<exec dir="${project.basedir}" executable="ksh" failonerror="true">
<arg value="${project.basedir}/livraison/outils/0_init_livraison.ksh">
</exec>
我尝试使用 Exec ksh 而不是脚本名称并将脚本作为参数,但它没有用。 我尝试设置 ANT_HOME 变量,但没有成功。
但是我改变了想法: 拥有依赖于控制台的构建是非常有问题的,Maven 周围的大多数集成工具都无法使用它,因为它们假设自治 运行s。这种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
}
这样我的问题就解决了
无论如何,谢谢你的建议:)