exec maven插件:退出代码

时间:2016-08-03 08:39:08

标签: bash maven exec-maven-plugin

我有以下插件来运行.sh脚本:

<plugin>
  <artifactId>exec-maven-plugin</artifactId>
  <groupId>org.codehaus.mojo</groupId>
  <executions>
    <execution>
      <id>deploy-bundles</id>
      <phase>install</phase>
      <goals>
        <goal>exec</goal>
      </goals>
      <configuration>
        <executable>${basedir}/deploy.sh</executable>
        <successCodes>
            <successCode>0</successCode> <-- Not working
        </successCodes>
      </configuration>
    </execution>
  </executions>
</plugin>

将某些文件夹和文件复制到某些位置。有用。但是,为了以防万一,我希望有一个错误的错误机制。我的set -e脚本中已经有.sh命令,但我也想要一个maven解决方案。我听说有tag名为successCodes,我试着加入它。但到目前为止没有运气。有人能指出正确的做法吗?

修改:我的.sh脚本如下所示:

cp ../template/config.properties $component/conf
cp ../../runtime/group1/group1.mw/conf/log4j.xml $component/conf
# if the component is planning, create an additional folder called plans
if [[ $component == *".planning"* ]] 
then
mkdir -p $component/plans
    # copy all the plans here
    cp ../../mission.planning/plans/* $component/plans
fi  

如果没有这些文件夹/文件,预计会失败。因此,作为测试,我手动更改上面的路径并期望它失败。它确实使执行过程失败并告诉我错误(因为我在set -e脚本中有.sh命令),但是maven报告是&#34;成功&#34;。

1 个答案:

答案 0 :(得分:3)

这不是Exec Maven插件的问题,而是Shell脚本中处理退出代码的问题。

successCodes参数在可执行文件的退出代码不为0的情况下非常有用,用于&#34;成功执行&#34;:

  

退出代码要解析为不合规应用程序的成功执行(应用程序未成功返回0)。

The default behaviour是将退出代码0视为成功执行,将所有其他代码视为失败,并且在这种情况下插件将无法构建。

在Shell脚本中,您有多个命令each of which has its own exit code。没有任何额外的处理,脚本本身的退出代码作为一个整体,是最后一个命令的退出代码。因此,即使其中一个命令失败(因此其退出代码不为零),之后成功的命令会将脚本退出代码重置为0.您可以通过在Maven外部的命令行上调用脚本来测试它,并回显theory <- c(195.0882,196.0852,196.0916,300.16,288.1752,289.1786,290.1819,393.2077,394.2111); experi <- c(195.0312,196.034,196.1251,288.1856,289.1786,290.1819); ## sort theory for findInterval() binary search theory <- sort(theory); ## get closest match for each experi element i <- findInterval(experi,theory,all.inside=T); inc <- which(abs(theory[i+1L]-experi)<abs(theory[i]-experi)); i[inc] <- i[inc]+1L; ## init result vector res <- theory[i]; ## replace with NA any result elements whose deviations exceed the tolerance res[abs(res-experi)>0.5] <- NA_real_; ## show result in a nice format data.frame(experi,res,error=experi-res); ## experi res error ## 1 195.0312 195.0882 -0.0570 ## 2 196.0340 196.0852 -0.0512 ## 3 196.1251 196.0916 0.0335 ## 4 288.1856 288.1752 0.0104 ## 5 289.1786 289.1786 0.0000 ## 6 290.1819 290.1819 0.0000 变量which contains the exit code

因此,您需要测试在Shell中可能失败的每个调用命令的退出代码。 (您也可以使用a bit of arithmetic累积每个退出代码。)