我试图编写一个定制的maven-2插件,似乎找不到任何关于读取settings.xml和解密服务器条目的文档。
我查看了一些maven依赖项,比如maven-settings和maven-settings-builder (都是3.0.3版本,我假设它适用于maven 3,因为我在Server.clone()上找不到异常的方法有问题)。
maven-settings:2.2.1能够加载设置(痛苦的是,您必须提供到settings.xml的路径--是否有一个工厂方法只使用默认的${user.home}/.m2/setings.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)的指导:
org.apache.maven.Settings对象中,而不必指定完整路径DefaultSettingsDecryptor类:3.0.3DefaultSettingsDecryptor类一样)都在我的自定义AbstractMojo实现的执行方法中。
发布于 2012-07-10 17:30:08
就像往常一样,只要多花几分钟搜索和搜索源,答案就会出现.
(更新:见@ST对v3.3maven的答复)
深入了解源代码,了解3.0.3是如何解密的,我偶然发现了SecDispatcher接口和DefaultSecDispatcher实现。关于这一术语的快速google让我看到了这篇文章:
其中详细介绍了如何通过丛容器获取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。
发布于 2012-12-01 11:24:50
这个github项目让我们在一个setttings.xml文件中解码密码
发布于 2017-02-06 12:57:51
我能够使用内置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一样工作。
https://stackoverflow.com/questions/11418268
复制相似问题