28

私は、aspectj-compiler-plugin を使用する Maven プロジェクトを持っています。Java コードに Aspect コードへの参照があるように、型間宣言を使用します。このため、maven-compiler-plugin はアスペクト コードをコンパイルしないため、コンパイルに失敗します。

私の質問は、maven-compiler-plugin が何も役に立たないため、実行を無効にするにはどうすればよいですか?

このプロジェクトをコンパイルするにはいくつかの方法がありますが、最適ではありません。

  1. 除外フィルターを maven-compiler-plugin に追加します。プラグインは引き続き実行されますが、何もコンパイルしようとしません。問題は、これが Eclipse の ajdt プロジェクト コンフィギュレーターを壊すことです。
  2. すべての Java コードを aspectj フォルダーに移動します。これももったいない。
4

4 に答える 4

35

プラグインのフェーズを 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>
于 2013-01-31T01:54:33.263 に答える
30

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>持っていない場合<id>(たとえば、Jintian DENGの元の回答のように、追加するために編集されています)、発見したように機能しません。

于 2013-05-02T01:32:00.060 に答える
2

そもそも maven-compiler-plugin が実行される理由は、デフォルトのライフサイクル バインディングの 1 つをトリガーするためです。たとえば、mvn packageを使用して jar をパッケージ化する場合、コンパイル フェーズで compile:compile がトリガーされます。

デフォルトのライフサイクルを使用しないようにして、代わりにmvnspectj:compileを使用してください。

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.htmlには、maven のデフォルト ライフサイクル バインディングに関する詳細情報があります。

于 2013-01-30T21:59:00.370 に答える