如何获取settings.xml中定义的服务器的值以在我的pom.xml中使用它们?

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}).

披露:我是该项目的维护者.


Pas*_*ent 4

我认为这是不可能的,并且相信公开这些财产的价值是一个坏主意。

正如设置参考<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的秘密:权威指南一书。