2

親モジュールでのみ実行するように設計されたMavenプラグインを作成しました。これは基本的にカスタマイズされたアーキタイププラグインであり、いくつかの追加手順があります。したがって、ライフサイクルの一部ではなく、コマンドラインから実行されます。

現在、子モジュールで実行すると失敗します。コマンドが実行される親モジュール(私が気にするビット)で成功しますが、子モジュールを反復処理すると失敗します。今私が考えることができる1つの回避策は-Nフラグです-これは問題を修正します。問題は、このプラグインが多くの異なる人々によってコマンドラインから実行されることであり、私はそれをできるだけ単純にしたいと考えています。

私はこのページをチェックして、容疑者を試してみました。@inheritByDefault=falseしかし、それは違いはありません。

助言がありますか?

プロジェクトオブジェクトに少なくとも1つのモジュールがあるかどうかをプラグインコードでチェックできると思います。そうでない場合は、スキップしてください...しかし、それほど良くはないようです。

4

2 に答える 2

2

私は通常、Mavenセッションの実行ルートディレクトリをモジュールのベースディレクトリと比較することで、この問題を解決します。

public class ReactorRootRunnerMojo extends AbstractMojo {

  /**
   * @parameter expression="${session}"
   */
  private MavenSession session; 

  public void execute() throws MojoExecutionException, MojoFailureException {
    if (!isReactorRootProject()) {
        return;
    }
    // your code
  }

  private boolean isReactorRootProject() throws MojoExecutionException {
    try {
      String executionRootPath = new File(session.getExecutionRootDirectory()).getCanonicalFile().getAbsolutePath();
      String basedirPath = basedir.getCanonicalFile().getAbsolutePath();
      return executionRootPath.equals(basedirPath);
    } catch (IOException e) {
      throw new MojoExecutionException(e);
    }
  }
}
于 2012-09-21T22:43:22.443 に答える
0

原子炉の現在のプロジェクトがトップレベルのプロジェクトと同じであるかどうかを簡単に確認し、それに応じて続行できます。

  /**
   * @parameter expression="${session}"
   */
  private MavenSession session; 

    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        if (!session.getCurrentProject().equals(session.getTopLevelProject())) {
            return;
        }
        // Now do stuff on the top-level project only
    }
于 2022-01-26T14:47:51.773 に答える