编辑:我的错误是Maven表现得这样。案件结案。
我想从我的POM文件中以bash运行一系列命令。其中一个命令将文件列表作为其参数。我想要的是像这样运行它:
protoc --java_out=./outdir --proto_path="somepath" somepath/file1 somepath/file2
但是,当我从maven exec内部调用它时,实际上是在运行:
protoc --java_out=./outdir --proto_path=somepath 'somepath/file1 somepath/file2'
然后bash认为只有一个文件显然不存在。
我假设Maven检测到参数中是否有空格,然后通过输入单引号来尝试帮助,但在这种情况下,我不希望这种情况发生。
以下是exec插件配置。执行pom时会分配所有变量,并且它仅与单个文件作为参数一起使用。这是类似构建的原型,我希望能够使用不同的文件列表生成具体的poms。
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<id>compile-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>bash</executable>
<arguments>
<argument>-c</argument>
<argument>
set -x -E -e
export PATH="${basedir}/${unpackPath}/bin/:${PATH}"
export DYLD_LIBRARY_PATH="${basedir}/${unpackPath}/lib/:${DYLD_LIBRARY_PATH}"
chmod u+x "${unpackPath}/bin/"*
rm -rf "${compiledSrcPath}"
mkdir -p "${compiledSrcPath}"
protoc \
--java_out=./"${compiledSrcPath}" \
--proto_path="${protoPath}" \
${protoFiles}
</argument>
</arguments>
</configuration>
</execution>
</executions>
编辑:当从原型生成项目时,似乎已经出现了问题。生成的pom.xml包含"file1 file2"
代替原始${protoFiles}
。
答案 0 :(得分:1)
我在我自己的原型版本中混淆了,并错误地使用了一个用引号括起来"${protoFiles}"
的原型。
如果变量未包含在引号中,Maven将不会添加任何变量,它将按预期工作。