在Bash中使用Maven Exec插件

时间:2014-06-05 18:22:32

标签: java bash maven

我正在编写一个bash脚本,它将执行maven项目的某些部分。脚本如下所示:

CMD="mvn exec:java -Dexec.mainClass=$MAINCLASS -Dexec.args=\"cfg.txt TRAIN\""  
echo "Running $CMD..."

$CMD

但每次出现以下错误都会失败:

[ERROR] Unknown lifecycle phase "TRAIN". You must specify a valid 
lifecycle phase...

如果我跳过CMD=...作业,直接运行mvn部分,就像这样......

mvn exec:java -Dexec.mainClass=$MAINCLASS -Dexec.args="cfg.txt TRAIN"

......它运作得很好。

如何让maven和exec插件了解我在-Dexec.args部分有两个参数?

3 个答案:

答案 0 :(得分:1)

根据docs exec:java没有exec.args?它确实有exec.arguments,其中String[]会转换为:

CMD="mvn exec:java -Dexec.mainClass=$MAINCLASS -Dexec.arguments=\"cfg.txt\",\"TRAIN\""

答案 1 :(得分:1)

我刚刚发现这个问题也可以通过在整个-Dexec.args值周围加上引号来解决,如下所示:

CMD="mvn exec:java -Dexec.mainClass=$MAINCLASS \"-Dexec.args=cfg.txt TRAIN\""

答案 2 :(得分:0)

这实际上是一个bash引用问题,而不是Maven问题。

要调试它吗

echo $CMD

然后将结果剪切并粘贴到命令行中。修改引用直到它工作

尝试

CMD="mvn exec:java -Dexec.mainClass=$MAINCLASS -Dexec.args='cfg.txt TRAIN'" 

为初学者