Maven 2 如何获取settings.xml中定义的服务器值,以便在my pom.xml中使用它们?

Maven 2 如何获取settings.xml中定义的服务器值,以便在my pom.xml中使用它们?,maven-2,properties,Maven 2,Properties,我知道我可以使用属性检索一些settings.xml参数,例如${settings.localRepository}来获取本地存储库的位置 现在假设my settings.xml包含以下服务器定义: <servers> <server> <id>server-dev</id> <username>devuser</username> <password>de

我知道我可以使用属性检索一些settings.xml参数,例如
${settings.localRepository}
来获取本地存储库的位置

现在假设my 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>
但是没有一个有效



关于这一点,这是不可能的。然而,由于这是一个没有正确记录的功能,我仍然有一些希望通过这种方式做到这一点…

我不知道有什么简单的方法可以做到这一点。但是您可以编写一个小插件并将其绑定到早期阶段,然后从插件中访问设置值,或者直接在插件中使用它们,或者将它们作为属性公开

您可以通过查看的源来查看如何从设置中读取值,以及如何通过查看来设置值。我认为不可能,并且认为公开这些属性的值是个坏主意

如中所述,在
设置.xml
中使用
的目的是不将
用户名
密码
等值与
pom.xml
一起分发。因此,将属性公开以从任何地方读取它们都会破坏这一原则,并且可能是一个安全问题

编辑:我正在重新考虑这个问题,我说的不是真的

好了,Maven不会公开设置中定义的服务器的
用户名
密码
属性和/或提供类似于OP描述的机制但是能够从
pom.xml
访问它们不会错

话虽如此,正如Rich指出的那样,Maven API允许您访问设置中定义的服务器(请参阅),因此必须能够从Mojo(即在自定义插件中)设置属性


但我不确定你到底想做什么,也许使用
和配置文件是更好的方法。处理公共环境属性(但特定值)是配置文件的一个很好的用例。查看Maven:权威指南的章节和。可能性1将使用。您可以轻松访问服务器设置,如:


def server=settings.servers.find{it.id.equals('server-hom')}
然后将其放入公共属性中

project.properties.srvuser=server.username
在以下阶段,您可以像往常一样从POM访问属性:

${srvuser}
可能性2将在settings.xml中定义属性,如图所示。它不是来自服务器设置,而是来自一些基于配置文件的属性


无论如何我发现Maven默认情况下应该拉入所有服务器设置。

如果您使用的是Maven 3+,这可以通过以下方法实现。注册后,可以使用${settings.servers.server..}(例如${settings.servers.server.server-dev.username})引用settings.xml/servers内容

披露:我是项目的维护者。

如中所述:

最好的办法是:

<settings>
    <profiles>
        <profile>
            <activeByDefault>true</activeByDefault>
            <properties>
                <environment.type>prod</environment.type>
                <database.password>m1ss10nimp0ss1bl3</database.password>
            </properties>
        </profile>
    </profiles>
</settings>

真的
戳
m1ss10nimp0ss1bl3

大体上我同意,但在构建中有访问它们的用例,如nexus maven pluginAs 2019年3月所示,您到的链接已断开。请注意,这会向任何人公开用户名和凭据,任何人都可以看到在调试时使用loglevel运行的任何构建的日志。我在金融科技行业工作,这是一个很大的禁忌。(斯坦利,你能把这些信息整合到你的答案中吗?)
<settings>
    <profiles>
        <profile>
            <activeByDefault>true</activeByDefault>
            <properties>
                <environment.type>prod</environment.type>
                <database.password>m1ss10nimp0ss1bl3</database.password>
            </properties>
        </profile>
    </profiles>
</settings>