我正在编写一个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
部分有两个参数?
答案 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'"
为初学者