我有以下插件来运行.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;。
答案 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累积每个退出代码。)