Maven exec错误地将单引号添加到bash命令

时间:2016-05-18 11:22:13

标签: bash maven

编辑:我的错误是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}

1 个答案:

答案 0 :(得分:1)

我在我自己的原型版本中混淆了,并错误地使用了一个用引号括起来"${protoFiles}"的原型。

如果变量未包含在引号中,Maven将不会添加任何变量,它将按预期工作。