装配中的神秘属性 '${...}' 是什么意思?

3

编辑

在使用maven-assembly-plugin的<filtered>true</filtered>功能时,我遇到了一个奇怪的参数。

输入:

some unfiltered text
foo expands to '${params.foo}'
bar expands to '${params.bar}'
"..." expands to '${...}'

输出:

some unfiltered text
foo expands to 'FOO'
bar expands to 'BAR'
"..." expands to 'MavenProject: net.jsharp:assembly-example:1 @ /path/to/my/code/pom.xml'

params.fooparams.bar在我的pom.xml中被定义。然而,...没有被定义。我找不到任何可能定义它的settings.xml,所以它似乎是来自于超级pom或者是由过滤参数扩展的特殊性质引起的,但我无法弄清楚它是什么。在mvn help:effective-pom中也没有任何迹象。

这个神秘的${...}变量是什么?

可重现的示例在这里:https://gist.github.com/jpassaro/0892106beca2a066fae21320be41dcbf

原始问题(及其上下文)

在一些shell脚本中,我需要插值maven属性。我使用以下方式实现:

# '${...}' vars should be understood as being populated by maven
foo='${project.foo}'
bar='${project.bar}'

令我大为惊讶的是,当它通过汇编器运行时,会出现以下情况:

# 'MavenProject: <group-id>:<artifact-id>:<version> @ <path-to-project>/dependency-reduced-pom.xml' vars should be understood as being populated by maven
foo='FOO'
bar='BAR'

这个神秘的${...}变量是什么?
(maven 3.5.4,OSX,java 1.8)

请问您能否添加完整的pom文件...包括部分shell脚本和您如何替换值等?还有,您需要替换哪种属性以及原因是什么... - khmarbaise
2个回答

3
属性${...}的值解析为MavenProject.toString()。属性${..}${....}也是一样,但对于${.}不是这样。
这个属性的解析发生在ReflectionValueExtractor内部。实际上,这个类负责通过将属性如${project.build.outputDirectory}转换为方法链如project.getBuild().getOutputDirectory()来解析值。似乎该类无法处理两个点之间有任何内容的属性,并返回project
属性${...}及其解析似乎是未经记录的行为,因为它既没有在POM参考中记录,也没有在完全参考中记录。

0

这些变量或属性确实来自于Maven。它们要么在pom.xml中定义,要么在您使用的活动配置文件中定义(请参阅您的settings.xml,很可能在您的用户主目录中)


谢谢,很清楚这是来自Maven。至于POM和设置,根据我的编辑,我认为我已经排除了这个可能性。 - jsharp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接