mvn 属性 没有被 -D 选项覆盖

mvn property is not getting overriden with -D option

在我的 pom.xml 中,我有一个 属性 用于 protocPath:

    <properties>
        <protobuf.version>3.6.1</protobuf.version>
        <build.root.dir>${project.basedir}/..</build.root.dir>
        <build.output.dir>${build.root.dir}/build</build.output.dir>
        <protocPath>/usr/local/bin/protoc</protocPath>
    </properties>

我运行这个命令make mvn-build 我有 CMakeLists.txt

add_custom_target(
  mvn-build
  COMMAND mvn -s
            -DPROTOC_PATH=$ENV{PROTOC}
            verify
)

$ENV{PROTOC} 解析为某个安装路径,即不是 /usr/local/bin/protoc.

我收到这个错误。为什么它试图在 /usr/local/bin/protoc 中使用 protoc,而不是 $ENV{PROTOC} 中的那个?

[ERROR] Failed to execute goal org.xolstice.maven.plugins:protobuf-maven-plugin:0.6.1:compile (default) on project ntnxdb-client-proto: An error occurred while invoking protoc: Error while executing process. Cannot run program "/usr/local/bin/protoc": error=2, No such file or directory -> [Help 1]

编辑 我已经改成下面的,仍然是同样的错误:

add_custom_target(
  mvn-opt ALL
  WORKING_DIRECTORY ${NTNX_TOP_SOURCE_DIR}
  COMMAND mvn
            -DPROTOCPATH=$ENV{PROTOC}
            verify
)

Maven 属性确实区分大小写,因此您必须使用 -DprotocPath=... 来覆盖该值。

Maven 文档中 Pom referenceProperties 部分对此有明确的提示:

Note: While environment variables themselves are case-insensitive on Windows, lookup of properties is case-sensitive.

(粗体是我的)。

您也可以使用例如maven-compiler-plugin 的 verbose 设置:

mvn clean compile -Dmaven.compiler.verbose=true

对比

mvn clean compile -Dmaven.compiler.VERBOSE=true

只有前者有效。