解密自定义maven插件中的服务器条目

时间:2012-07-10 17:01:06

标签: maven maven-2 maven-plugin

我正在尝试编写自定义的maven-2插件,似乎无法找到有关读取settings.xml和解密服务器条目的任何文档。

我查看了一些maven依赖项,例如maven-settingsmaven-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)的指导:

  1. 将用户的settings.xml加载到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}" 对象中,而不必指定完整路径
  2. 解密settings.xml文件中的特定命名服务器条目(就像您可以在3.0.3中使用maven-settings-builder:3.0.3 org.apache.maven.Settings类)
  3. 所有在我的自定义DefaultSettingsDecryptor实施的执行方法

3 个答案:

答案 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-apimaven-settings pom依赖关系需要(事后明显)提供范围,因此它们不会导致捆绑和运行时容器版本之间的ClassCastExceptions

答案 1 :(得分:5)

这个github项目允许你解码setttings.xml文件中的密码

https://github.com/jelmerk/maven-settings-decoder

答案 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测试。适用于proxiesservers