6

Mojo のプロパティのノードに使用するような Maven のパスワード暗号化を使用したいと考えています。暗号化されたパスワードをモジョの正しいプロパティに貼り付けようとしましたが、プレーンテキストとして扱われました。Mojo プロパティのアノテーションに、暗号化できることを説明する属性を設定できることを期待していました。暗号化できる場合は、システム マスター パスワードを使用して復号化しますが、ドキュメントには何も表示されません。それ。

サーバーパスワードノード以外にMavenのパスワード暗号化を使用できた人はいますか? 私のモジョでこれを機能させたいです。

4

4 に答える 4

4

完全な答えではありませんが、うまくいけば正しい方向へのポインタです...

maven-scm-pluginmaven-release-plugin、およびtomcat6-maven-plugin<servers>はすべて、ファイルのセクションからパスワードを読み取ることができ${user.home}/.m2/settings.xmlます。

おそらく、これらのプラグイン/ゴールのソース コードを見ると、必要なことを実行できる Maven コアまたは共有コンポーネントが見つかり、ニーズに合わせてそれを適応させることができます。

于 2012-07-04T03:27:28.507 に答える
2

@ user944849 は私を正しい方向に導きました。これが解決策です。

Maven 2 を使用している場合は、mojo に次の依存関係を追加する必要があります。

<dependency>
  <groupId>org.sonatype.plexus</groupId>
  <artifactId>plexus-sec-dispatcher</artifactId>
  <version>1.4</version>
  <scope>compile</scope>
</dependency>

そして、以下を入れますsrc/main/resources/META-INF/plexus/components.xml

<?xml version="1.0" encoding="utf-8" ?>
<component-set>
  <components>
    <component>
      <role>org.sonatype.plexus.components.sec.dispatcher.SecDispatcher</role>
      <role-hint>mng-4384</role-hint>
      <implementation>org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher</implementation>
      <requirements>
        <requirement>
          <role>org.sonatype.plexus.components.cipher.PlexusCipher</role>
          <role-hint>mng-4384</role-hint>
          <field-name>_cipher</field-name>
        </requirement>
      </requirements>
      <configuration>
        <_configuration-file>~/.m2/settings-security.xml</_configuration-file>
      </configuration>
    </component>
    <component>
      <role>org.sonatype.plexus.components.cipher.PlexusCipher</role>
      <role-hint>mng-4384</role-hint>
      <implementation>org.sonatype.plexus.components.cipher.DefaultPlexusCipher</implementation>
    </component>
  </components>
</component-set>

次に、Mojo でパスワードを通常のプロパティとして取得SecDispatcherし、同じroleHint. のdecryptメソッドStringは、Maven で暗号化された文字列でない場合、文字列自体を返します。

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException;

/**
 * @goal echopass
 * 
 * @phase process-sources
 */
public class MyMojo extends AbstractMojo {
  /**
  * The password
  * @parameter expression="${password}"
  */
  private String password;

  /**
   * Plexus component for the SecDispatcher
   * @component roleHint="mng-4384"
   */
  private SecDispatcher secDispatcher;

  private String decrypt(String input) {
    try {
      return secDispatcher.decrypt(input);
    } catch (SecDispatcherException sde) {
      getLog().warn(sde.getMessage());
      return input;
    }
  }

  public void execute() throws MojoExecutionException {
    String s = decrypt(password);
    getLog().info("The password is " + s);
  }
}

文字列は、 のプロパティsettings.xmlやプロファイルに含めることができます。また、暗号化された文字列をコマンドラインでシステム プロパティとして渡すこともできます。

参考文献:

于 2013-01-05T03:01:23.913 に答える
1

このコードをサンプルSqlExecMojoとして見てください。プラグインを使用している場合は、パスワードを取得して復号化できます。リソース プラグインでプロパティをフィルタリングするために使用したい場合は、おそらくリソース プラグインのカスタム バージョンを作成する必要があります。私は同様の問題を抱えており、これを行うことになるかもしれません。

于 2012-11-23T15:43:18.000 に答える