【问题标题】:Decrypting server entries in custom maven plugin解密自定义 Maven 插件中的服务器条目
【发布时间】:2012-07-10 05:19:35
【问题描述】:

我正在尝试编写自定义 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}" 

无论如何,我正在寻找有关如何(使用 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 实现的执行方法中

【问题讨论】:

    标签: maven maven-2 maven-plugin


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      一如既往,只需多花几分钟时间搜索和寻找源代码,答案就会呈现出来......

      更新:请参阅@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

      【讨论】:

      • 这不再适用于我:原因:java.lang.ClassCastException:org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher$__sisu10 无法转换为 org.sonatype.plexus.components .sec.dispatcher.SecDispatcher (Maven 3.3.9)
      【解决方案3】:

      我能够使用内置 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 一样使用。

      【讨论】:

        猜你喜欢
        • 2011-04-05
        • 2012-08-22
        • 2016-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        相关资源
        最近更新 更多