2

1つのモジュールがソースの生成にのみ使用されるMavenマルチモジュラービルドを定義しました。コンパイル、テスト、パッケージ化は行われず、ソースファイルの生成以外にアーティファクトは作成されません。

generate-sourcesマルチモジュールビルドを開始するときに指定するフェーズに関係なく、ジェネレーターモジュールでまでのフェーズのみを実行する方法をまだ見つけていません。不要なフェーズをスキップするためのいくつかの解決策がありますが、それらの多くにのみ存在するため、これは実際のオプションではありません。

疑問に思っている人のために、なぜそれが必要なのか:ビルドはtychoとfornax oawプラグインを使用するため、ビルドを2つの別々のpomファイルに分割し、マルチモジュールビルドファイルを使用してそれらを「一緒に」実行する必要がありました。

4

2 に答える 2

2

あなたの最新の質問を見た後、私はあなたのための解決策があるかもしれないと思います.

../projectN/generate/pom.xml親としてすべてのトップポンがあると思いますが、generate-parentすべてのフェーズをスキップする特別なプラグイン管理を備えた特別なポンを作成することをお勧めします。

generate-parent最上位で呼び出される追加のフォルダーを作成します。

<modules>
    <module>../generate-parent/pom.xml</module> <!-- NEW FOLDER WITH POM -->
    <module>../project1/generate/pom.xml</module>
    <module>../project1/pom.xml</module>
    <module>../project2/generate/pom.xml</module>
    <module>../project2/pom.xml</module>
    <!-- and many more projects with or without generate sub modules -->
</modules>

この新しい pom は、通常どおり親 pom から継承されますが、いくつかのプラグイン管理が追加されるだけです。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>your-group</groupId>
        <artifactId>your-parent-pom-artifact-id</artifactId>
        <version>your-parent-version</version>
    </parent>

    <artifactId>generate-parent</artifactId>
    <packaging>pom</packaging>

    <name>${project.artifactId}-${project.version}</name>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.4.3</version>
                    <executions>
                        <execution>
                            <id>default-resources</id>
                            <phase>none</phase>
                        </execution>
                        <execution>
                            <id>default-testResources</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <executions>
                        <execution>
                            <id>default-compile</id>
                            <phase>none</phase>
                        </execution>
                        <execution>
                            <id>default-testCompile</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.7.2</version>
                    <executions>
                        <execution>
                            <id>default-test</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.3.1</version>
                    <executions>
                        <execution>
                            <id>default-jar</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.3.1</version>
                    <executions>
                        <execution>
                            <id>default-install</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.5</version>
                    <executions>
                        <execution>
                            <id>default-deploy</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

これで、すべてのデフォルト フェーズが無効になります。

すべての生成プロジェクトでこの pom を使用します。上記の pomは、親 pom にあるすべてgenerate-sourcesの優れた機能を継承しますが、 .

project1/generate/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>your-group</groupId>
        <artifactId>generate-parent</artifactId>
        <version>your-parent-version</version>
        <relativePath>../../generate-parent</relativePath>
    </parent>

    ...
    The rest of your pom
    ...
</project>

これはあなたが望むことを効果的に行いますgenerate-parent.これらの生成プロジェクトだけに必要なすべてのプラグイン管理を追加する仲介者です.

于 2012-10-25T15:06:50.363 に答える
1

私が理解している限りでは、これは Maven ビルドで呼び出されるコード ジェネレーターを作成するために Xtext を使用することに関するものです。プロジェクトをもう少し分割する必要があると思います。文法を変更する場合にのみ、ジェネレーターをビルドする必要があります。そのため、ジェネレーターを含む独立したプロジェクト (モジュールではない) を用意することをお勧めします。ジェネレーターをビルドして Maven リポジトリーにデプロイします。通常のビルドでは、fornax-oaw-m2 プラグインを使用して、generate-sources現在行っているフェーズでソースを生成します。fornax-oaw-m2 プラグインの依存関係としてジェネレーターを含める必要があるだけです。

編集:
ビルドしたいマルチモジュールプロジェクトに戻るには:ソースを生成するリソースのみを含み、他には何も含まないモジュールがあることをお勧めします。他の Java ソースは、独自のモジュールに含める必要があります。次に、ジェネレーターを使用するための 2 つの代替案を提案できます。

  1. ソースを生成するリソースを含むモジュールでジェネレーターを実行し、相対パスを適切に設定します
  2. 生成されたソースを含むモジュールでジェネレーターを実行し、モジュールを依存関係としてリソースに含めます (リソースを生成する前に、その依存関係を解凍する必要がある場合があります)。

generate-sourcesあなたはまだフェーズで常に生成します。2 番目の方法では、一連の異なるモジュールのソースを生成する必要がある場合、fornax-oaw-m2 プラグインの構成が複製されます。しかし、現在構築しているプロジェクトを変更するだけなので、これはよりMavenな方法だと思います。最初の方法では、ソースが生成されるモジュールからソース生成を行うモジュールへの依存関係を宣言する必要があります。これは少し厄介なようです。

于 2012-10-18T17:05:44.230 に答える