3

カスタムの maven-2 プラグインを作成しようとしていますが、settings.xml の読み取りとサーバー エントリの復号化に関するドキュメントが見つからないようです。

maven-settingsmaven-settings-builder(両方ともバージョン 3.0.3 で、メソッドが見つからないという例外に問題があるため、maven 3 であると想定しています)などのいくつかの Maven 依存関係を調べました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. org.apache.maven.Settingsフルパスを指定せずに、ユーザーの settings.xml をオブジェクトに読み込みます
  2. settings.xml ファイル内の特定の名前付きサーバー エントリを復号化します (3.0.3 で maven-settings-builder:3.0.3DefaultSettingsDecryptorクラスを使用して実行できるように)

AbstractMojoカスタム実装の execute メソッド内のすべて

4

3 に答える 3

5

この github プロジェクトでは、settings.xml ファイル内のパスワードをデコードできます

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

于 2012-12-01T11:24:50.243 に答える
5

いつものように、ソースを検索して探し出すのにさらに数分を費やすだけで、答えが現れます...

(更新: v3.3 maven については @ST-DDT の回答を参照してください)

3.0.3 が復号化を行う方法についてソースを掘り下げると、SecDispatcher インターフェイスと DefaultSecDispatcher 実装に出くわしました。その用語に関する簡単なグーグルで、この記事にたどり着きました。

神経叢コンテナーを介して 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-apiand maven-settingspom 依存関係に問題があったため、バンドルされたコンテナー バージョンとランタイム コンテナー バージョンの間で ClassCastExceptions が発生することはありませんでした。

于 2012-07-10T17:30:08.640 に答える
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 に答える