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

Chr*_*ite 3 maven-2 maven-plugin maven

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

我环顾了一些maven依赖项,例如maven-settingsmaven-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}" 
Run Code Online (Sandbox Code Playgroud)

无论如何,我特别寻找关于如何(与maven 2.2.1)的指导:

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

都在我的自定义AbstractMojo实现的execute方法中

Chr*_*ite 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());
Run Code Online (Sandbox Code Playgroud)

最后的疑难杂症是同一个问题maven-plugin-api,并maven-settings提供范围(事后明显)需要POM依赖关系,因此他们并没有引起捆绑和运行时容器版本之间的ClassCastExceptions


小智 5

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

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