1

コミットされていないローカル変更があるかどうか、または作業コピーが svn リポジトリと同期していないかどうかを検出するために svnkit を使用するカスタム Maven プラグインを作成し、mvn デプロイに失敗しました。

実行コードは次のとおりです。

public void execute() throws MojoExecutionException, MojoFailureException {

    PluginDescriptor pd = (PluginDescriptor)getPluginContext().get("pluginDescriptor");
    MavenProject p = (MavenProject)getPluginContext().get("project");

    //init log
    Log log = getLog();
    SVNHelper.initLogger(log);

    //Throws MojoFailureException if there are uncommitted changes
    checkForUncomittedChanges(p.getBasedir(), log);

    //Throws MojoFailureException if the working copy is not up to date
    checkForWorkingCopyUpToDate(p.getBasedir(), log);
}

次に、プラグインが使用された pom.xml で、デプロイにバインドします

プラグインは正しく呼び出されていますが、デプロイが既に行われた後にビルドが失敗します。プラグインを移動してインストール フェーズで実行することもできますが、この場合、インストールでビルドの失敗を表示したくありません。デプロイを停止するだけです。

私が欠けているものはありますか?

4

1 に答える 1

0

2 つの提案:

  1. (私たちのやり方) SVN チェック後にビルドに Jenkins を使用し、Nexus セキュリティを構成して、Jenkins ユーザーからのデプロイのみを許可します。このアプローチでは、カスタム プラグインは必要ありません (ユーザーが pom.xml から削除できます)。

  2. デフォルトのライフサイクルを変更します。

おそらくあなたが行ったことは、Mojo を @phase で構成して、展開フェーズ中にトリガーするようにすることです。展開フェーズの 2 つの目標 (deploy:deploy と your:goal) が同じ場所で定義されていることを確認してください。そうすれば、実行順序が決定されます。

これを行うには、カスタム ライフサイクル ( http://www.sonatype.com/books/mvnref-book/reference/writing-plugins-sect-plugins-lifecycle.html ) を定義し、 で 2 つの目標を指定する必要があります。これを行ったことがないので、デフォルト/jar ライフサイクルを単純にオーバーライドできるのか、それとも独自の新しいパッケージ タイプを作成する必要があるのか​​わかりません。

疑問がある場合は、提案 1 を真剣に検討してください。

于 2013-02-10T20:25:53.767 に答える