【问题标题】:How to do input task in maven antrun plugin如何在 maven antrun 插件中执行输入任务
【发布时间】:2015-08-11 14:56:40
【问题描述】:

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

如果我使用 exec-maven-plugin 执行 sudo mvn 包,它会起作用

但是,但是,但是:

  • 如果我执行 sudo mvn 包,我的脚本不会在读取命令处停止。
  • 如果我使用 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

【问题讨论】:

  • 你的脚本中变量$boucle在哪里定义?
  • 我在复制/粘贴时想念它。我编辑了帖子
  • 我建议您通过input Ant 任务读取用户输入。请参阅this question 了解更多信息。
  • 我尝试使用 任务。出现类似问题:在发布准备操作期间输入任务似乎被阻止(我编辑了我的帖子)

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


【解决方案1】:

任何一个

设置环境变量ANT_HOME,给你的Maven添加一个属性: &lt;property name="ant.home" value="${env.ANT_HOME}" /&gt; 并将参数 vmlauncher="true" 添加到您的 Ant Exec 部分。

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

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

【讨论】:

    【解决方案2】:

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

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

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

    mvn clean packge -Dforcer=ouimvn 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
    }
    

    这样我的问题就解决了。

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

    【讨论】:

      猜你喜欢
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2011-02-18
      • 2011-04-16
      • 1970-01-01
      • 2022-02-03
      相关资源
      最近更新 更多