私はaspectj-compiler-pluginを使用するMavenプロジェクトを持っています。タイプ間宣言を使用しているため、Javaコードにアスペクトコードへの参照があります。このため、maven-compiler-pluginはアスペクトコードをコンパイルしないため、コンパイルに失敗します。
私の質問は、maven-compiler-pluginが何の役にも立たないので、実行を無効にするにはどうすればよいですか?
このプロジェクトをコンパイルする方法はいくつかありますが、それらは最適ではありません。
プラグインのフェーズをnoneに設定することで、プラグインを無効にできます。
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
Maven 3では、次のようになります。たとえば、クリーンプラグインを無効にします。
<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>default-clean</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
同じ手法を、スーパーPOM、パッケージタイプ、または親POMで定義されている他のプラグインにも使用できます。重要な点は、<id>
で示されるhelp:effective-pom
をコピーし、<phase>
を無効な値(「none」など)に変更する必要があるということです。 <id>
がない場合(たとえば、Jintian DENGの元の回答のように、編集されて追加されています)、ご存知のとおり、機能しません。
Maven-compiler-pluginが最初に実行される理由は、デフォルトのライフサイクルバインディングの1つをトリガーするためです。たとえば、mvn packageを使用してjarをパッケージ化する場合、コンパイルフェーズでcompile:compileがトリガーされます。
デフォルトのライフサイクルを使用しないようにしてください。代わりにmvnアスペクトj:compileを使用してください。
http://maven.Apache.org/guides/introduction/introduction-to-the-lifecycle.html Mavenのデフォルトのライフサイクルバインディングに関する詳細情報があります
skipMain
パラメーターを構成します。
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<skipMain>true</skipMain>
</configuration>
</plugin>
</plugins>
</build>
または、maven.main.skip
プロパティを渡します。
mvn install -Dmaven.main.skip=true