组装中的神秘行家属性“ $ {...}”

时间:2018-12-21 15:33:30

标签: maven maven-assembly-plugin

已编辑

使用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)

2 个答案:

答案 0 :(得分:2)

属性${...}的值解析为MavenProject.toString()${..}${....}会发生相同的情况,但${.}不会发生。

此属性的解析发生在ReflectionValueExtractor内部。此类实际上负责通过将诸如${project.build.outputDirectory}之类的属性转换为诸如project.getBuild().getOutputDirectory()之类的方法链来解析值。看来该类无法处理两个点之间包含任何内容的属性,而是返回project

${...}属性及其解析似乎是未记录的行为,因为它既未记录在POM Reference中也未记录在Complete Reference中。

答案 1 :(得分:0)

那些变量或属性确实来自maven。它们是在pom.xml或您使用的活动配置文件中定义的(请参阅settings.xml,很可能在用户的主文件夹中)