Maven 2 如何获取settings.xml中定义的服务器值,以便在my pom.xml中使用它们?
我知道我可以使用属性检索一些settings.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.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>