4

プロジェクトからインターフェイス A を読み取り、そこから新しいインターフェイス B を生成する単純なコード ジェネレーター G があります。したがって、私はこれを達成する必要があります:

  1. コンパイルA
  2. Gを実行
  3. コンパイル B

ステップ 1 と 3 は maven-compiler-plugin によって処理されますが、ステップ 2 では maven-exec-plugin を使用します。現在、ステップ 1 と 2 はうまく機能していますが、コンパイラ プラグインを再度実行して、新しく生成されたバージョンの B をコンパイルする方法がわかりません。

これはmavenで可能ですか、それとも私の問題を解決する別のアプローチがありますか?

解決:

khmarbaise の回答に基づいて、これを pom.xml に追加して、generate-sourcesフェーズで最初のコンパイルを実行し、 process-sourcesフェーズでコード生成を実行して、生成されたクラスをコンパイルフェーズで使用できるようにします。

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <executions>
                <execution>
                    <id>pre-compile</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>process-sources</phase>
                    <goals>
                        <goal>java</goal>
                    </goals>
                    <configuration>
                        <mainClass>com.example.MyCodeGenerator</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
4

1 に答える 1

7

generate-sourcesでコンパイルを実行しましょう。その特定のライフサイクルフェーズで実行するようにmaven-compiler-pluginを構成し、生成されたコード(コンパイルされたコード)をデフォルト以外の場所に配置するだけです。次に、実行をその後のフェーズ(プロセスソース)で実行し、最後に残りを通常どおりに実行します。その結果、maven-compiler-pluginをgenerate-sourcesフェーズにバインドし、exec-pluginをprocess-sourcesライフサイクルフェーズにバインドする必要があります。

于 2012-09-24T13:07:35.113 に答える