我正在尝试编写自定义的maven-2插件,似乎无法找到有关读取settings.xml和解密服务器条目的任何文档。
我查看了一些maven依赖项,例如maven-settings
和maven-settings-builder
(版本3.0.3,我认为它适用于maven 3,因为我遇到了{找不到方法的方法的问题} {1}})。
Server.clone()
能够加载设置(痛苦地,您必须提供settings.xml的路径 - 是否有工厂方法只使用默认的$ {user.home} /。m2 /settings.xml?),但我找不到解密API(就像3.0.3中存在的那样):
maven-settings:2.2.1
无论如何,我特意寻找关于如何(使用maven 2.2.1)的指导:
DefaultMavenSettingsBuilder builder = new DefaultMavenSettingsBuilder();
Settings settings = builder.buildSettings(new File(System.getProperty("user.home") + "/.m2/settings.xml"));
settings.getServer("id").getPassword();
// i get the encrypted String "{gsfdGJHv69}"
对象中,而不必指定完整路径org.apache.maven.Settings
类)所有在我的自定义DefaultSettingsDecryptor
实施的执行方法
答案 0 :(得分:5)
一如既往的方式,只需花费几分钟时间搜索和搜索来源,并回答问题......
(更新:请参阅@ ST-DDT对v3.3 maven的回答)
通过源头了解3.0.3如何解密我偶然发现了SecDispatcher接口和DefaultSecDispatcher实现。这个术语的快速谷歌让我看到了这篇文章:
详细介绍了如何通过plexus容器获取SecDispatcher。所以现在我有办法解密,现在我只需要更漂亮的方式来获取设置,这类似于SecDispatcher的获取 - 使用容器:
Settings settings = ( (MavenSettingsBuilder) container.lookup(MavenSettingsBuilder.ROLE) ).buildSettings();
SecDispatcher secDispatcher = (SecDispatcher) container.lookup(SecDispatcher.ROLE, "maven")
String password = secDispatcher.decrypt(settings.getServer("id").getPassword());
最终问题是maven-plugin-api
和maven-settings
pom依赖关系需要(事后明显)提供范围,因此它们不会导致捆绑和运行时容器版本之间的ClassCastExceptions
答案 1 :(得分:5)
这个github项目允许你解码setttings.xml文件中的密码
答案 2 :(得分:1)
我能够使用inbuild settingsDecrypter
解密密码。
@Component
private SettingsDecrypter settingsDecrypter;
SettingsDecryptionRequest decryptionRequest = new DefaultSettingsDecryptionRequest(possibleProxy);
SettingsDecryptionResult decryptionResult = this.settingsDecrypter.decrypt(decryptionRequest);
Proxy proxy = decryptionResult.getProxy();
使用Maven 3.3.9测试。适用于proxies
和servers
。