如何使用maven help:evaluate非交互式串联多个Maven属性?
如何用maven-help-plugin非交互式拼接多个Maven属性输出
要实现非交互式拼接project.artifactId和project.version并输出,核心是确保Maven能收到完整的表达式,避免shell提前解析变量。以下是可行的解决方案:
正确命令
你可以用单引号包裹完整的Maven表达式(避免shell解析$符号),或者转义$符号:
方式1:用单引号包裹表达式(推荐)
mvn help:evaluate -Dexpression='${project.artifactId}-${project.version}' -q -DforceStdout
方式2:转义$符号(适用于必须用双引号的场景)
mvn help:evaluate -Dexpression="\${project.artifactId}-\${project.version}" -q -DforceStdout
执行后就能得到你想要的结果:maven-tests-0.0.3-SNAPSHOT
为什么之前的尝试失败?
我们来逐个分析你试过的方法问题所在:
- 直接用
${}包裹未转义:bash会把${project.artifactId}当作自己的环境变量解析,如果这个变量不存在,就会变成空字符串,导致Maven收到的表达式是-project.version(或更混乱的内容),自然返回错误。 - 转义短横线:短横线是普通字符,不需要转义,这个操作反而会让Maven把
\-当成表达式的一部分,导致解析失败。 - 用
"包裹短横线:"是HTML转义字符,Maven的表达式引擎不识别,会被当作普通字符串处理,导致表达式结构错误。
补充说明
maven-help-plugin 3.2.0完全支持这种表达式拼接,因为它的evaluate目标兼容完整的Maven表达式语言——不仅可以直接拼接变量,还能使用Maven的内置函数(比如字符串拼接函数),比如:
mvn help:evaluate -Dexpression='${project.artifactId.concat("-").concat(project.version)}' -q -DforceStdout
不过这种方式不如直接变量拼接直观,推荐第一种方法。
内容的提问来源于stack exchange,提问作者klerb
相关产品推荐
相关产品推荐

