3

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

我查看了一些 maven 依赖项,例如maven-settingsand maven-settings-builder(两个版本都是 3.0.3,我假设它适用于 maven 3,因为我遇到了关于方法未找到异常的问题Server.clone())。

maven-settings:2.2.1能够加载设置(痛苦的是,您必须提供 settings.xml 的路径 - 是否有工厂方法可以只使用默认的 ${user.home}/.m2/settings.xml?),但是我找不到解密 API(如 3.0.3 中存在的那个):

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}" 

无论如何,我正在专门寻找有关如何(使用 maven 2.2.1)的指导:

  1. 将用户的 settings.xml 加载到org.apache.maven.Settings对象中,而无需指定完整路径
  2. 解密 settings.xml 文件中的特定命名服务器条目(就像您可以在 3.0.3 中使用 maven-settings-builder:3.0.3DefaultSettingsDecryptor类一样)

全部在我的自定义AbstractMojo实现的执行方法中

4

3 回答 3

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-settingspom 依赖项(事后很明显),因此它们不会导致捆绑和运行时容器版本之间的 ClassCastExceptions

于 2012-07-10T17:30:08.640 回答
5

这个 github 项目让您解码 setting.xml 文件中的密码

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

于 2012-12-01T11:24:50.243 回答
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类似的作品。

于 2017-02-06T12:57:51.400 回答