maven - 程序集中的神秘 Maven 属性'${...}'
问题描述
已编辑
<filtered>true</filtered>
在使用maven-assembly-plugin的特性时遇到了一个奇怪的参数。
在:
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.foo
并params.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)
解决方案
属性的值${...}
解析为MavenProject.toString()。和也会发生同样的情况${..}
,${....}
但不会发生${.}
。
此属性的解析发生在ReflectionValueExtractor内部。这个类实际上负责通过将属性转换${project.build.outputDirectory}
为方法链来解析值project.getBuild().getOutputDirectory()
。似乎该类无法处理两个点之间的任何属性,project
而是返回。
该属性${...}
及其解析似乎是未记录的行为,因为它既没有记录在POM Reference也没有记录在Complete Reference中。
推荐阅读
- python - Python - 从字符列表创建字符串
- angular - Angular + Optimizely:如何在不重新加载的情况下导航到测试页面 url(使用 Angular 的路由器导航)?
- google-chrome - 通过 Selenium Webdriver 管理 Chrome 策略
- makefile - 为什么我得到 Makefile:8: *** 缺少分隔符。停止
- javascript - 如何根据每个客户端动态连接mysql数据库?
- java - 如何使用 Java regexp 从文本中排除双重配额?
- java - 如何在 apache poi 3.17 中调用 trackAllColumnsForAutoSizing() 方法
- jquery - Laravel 5.2 编辑按钮单击时不显示模态内容
- java - 从 Rest 客户端请求通过服务到 Web 应用程序检索 JSON
- hyperledger-fabric - Hypereldger Fabric 中的应用能力 v1.2