Rom*_*las 7 maven-2 properties
我知道我可以使用属性检索一些settings.xml参数,例如${settings.localRepository},获取本地存储库的位置.
现在假设我的settings.xml包含以下服务器定义:
<servers>
<server>
<id>server-dev</id>
<username>devuser</username>
<password>devpass</password>
</server>
<server>
<id>server-hom</id>
<username>homuser</username>
<password>hompass</password>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud)
有没有办法,给定id一个服务器来获取任何参数的值?例如,类似的东西${settings.servers.server.server-dev.username}会返回devuser.
我已经尝试过以下方法:
${settings.servers.server.server-dev.username}
${settings.servers.server-dev.username}
${settings.servers.server[server-dev].username}
${settings.servers[server-dev].username}
Run Code Online (Sandbox Code Playgroud)
但他们都没有工作......
关于此页面,这是不可能的.但是,由于这是一个没有正确记录的功能,我仍然希望以这种方式做到这一点......
小智 12
如果您使用Maven 3+,可以使用servers-maven-extension实现.注册后,可以使用$ {settings.servers.server.<server id>.<property>}引用settings.xml/servers内容(例如$ {settings.servers.server.server-dev.username}).
披露:我是该项目的维护者.
我认为这是不可能的,并且相信公开这些财产的价值是一个坏主意。
正如设置参考<servers>中所解释的,具有 的目的是不与 一起settings.xml分配诸如username或 之类的值。因此,公开属性以从任何地方读取它们只会违反这一原则,并且可能会产生安全问题。passwordpom.xml
编辑:我再次思考这个问题,我说的不是真的。
AFAIK,Maven 不会公开设置中定义的服务器的username属性password和/或提供类似于 OP 描述的机制。但能够从pom.xml.
话虽如此,正如 Rich 指出的那样,Maven API 使您可以访问设置中定义的服务器(请参阅org.apache.maven.settings.Settings#getServer(String serverId)),因此必须可以从 Mojo 设置属性(即在自定义插件中)。
但我实际上不确定你到底想做什么,也许使用<properties>和配置文件会是更好的方法。处理常见的环境属性(但特定值)是配置文件的一个很好的用例。查看章节11.5.1。常见环境和11.5.2 保护Maven的秘密:权威指南一书。