5

私たちの maven pom.xml は、特定のプロファイル (ここでは「java8」) がアクティブになっている場合に、追加のソースとテストソース フォルダーを追加するように指定します。pomの対応する部分は次のようになります

    <profile>
        <id>java8</id>
        ....
        <build>
            <plugins>
                ....
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                        <execution>
                            <id>add-test-source</id>
                            <phase>generate-test-sources</phase>
                            <goals><goal>add-test-source</goal></goals>
                            <configuration>
                                <sources>
                                    <source>src/test/java8</source>
                                </sources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

http://mojo.codehaus.org/build-helper-maven-plugin/usage.htmlによると、これは正しい仕様のようです。

実行mvm install -P java8中 追加のテストが期待どおりに実行されていることがわかります。

ただし、mvm eclipse:eclipse -P java8追加のテスト ソース フォルダーを実行しても eclipse には表示されません.classpath

質問: テスト ソース フォルダーを Eclipse 構成に追加するには、maven をどのように構成する必要がありますか? 上記の動作はバグですか、それとも設定ミスですか?

4

4 に答える 4

5

これを実験するのに時間を費やしたので、私自身の質問に部分的な答えを出すことができます (うまくいけば、他の開発者の時間を節約できます):

使用する場合

                            <phase>generate-sources</phase>
                            <goals><goal>add-test-source</goal></goals>

それ以外の

                            <phase>generate-test-sources</phase>
                            <goals><goal>add-test-source</goal></goals>

次に、テスト ソース フォルダーが eclipse .classpath に追加されます (そして、テスト フォルダーとして追加されます)。つまり、現在、別のフェーズで「add-test-source」を実行しています。

つまり、プロファイルは次のようになります。

    <profile>
        <id>java8</id>
        ....
        <build>
            <plugins>
                ....
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                        <execution>
                            <id>add-test-source</id>
                            <phase>generate-sources</phase>
                            <goals><goal>add-test-source</goal></goals>
                            <configuration>
                                <sources>
                                    <source>src/test/java8</source>
                                </sources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

これは「回避策」のように見えます。http://mojo.codehaus.org/build-helper-maven-plugin/usage.htmlの仕様とまだ矛盾しています。

于 2013-10-31T08:14:08.830 に答える
1

私はあなたのクリスチャン・フライズと同じ問題を経験しており、add-test-source目標をgenerate-sources段階ではなく段階に結び付けることについて、あなたと同じ結論に達しましたgenerate-test-sources

問題は、 を実行するmvn eclipse:eclipseと、実際にはプラグインを直接呼び出しているため、そのプラグインのみが実行されることです。フェーズが実行される理由はgenerate-sources、プラグインのドキュメント ( http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html )で説明されています。

Invokes the execution of the lifecycle phase generate-resources prior to executing itself.

私たちが望むのは、プラグインにgenerate-test-sourcesそれ自体の前にフェーズを実行してから実行するように指示できるようにすることです。maven は、指定したフェーズ ( http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html ) までのすべてのフェーズを実行するので、run と言う必要はありません。generate-sourcesそしてgenerate-test-sources、後者を指定するだけで十分だからです。とにかく、実行してこの状況をテストできます (順序が重要です)。

mvn generate-test-sources eclipse:eclipse

...そして私にとって、これはまさに私たちが期待したとおりでした。出力から、build-helper-maven-plugin が実行されてテスト ソースが追加され、maven-eclipse-plugin が実行されてそれが取得されることがわかります。

知る限り、プラグインをフェーズにバインドすることしかできず (したがって、フェーズが実行されたときに実行されます)、その逆はできないため、新しい問題が発生しました。

(一種の) 解決策は、 と を (その順序で、POM でプラグインをその順序で定義する) フェーズにバインドしbuild-helper-maven-pluginmaven-eclipse-plugin実行generate-test-sourcesする代わりにmvn eclipse:eclipse、実行することです。

mvn generate-test-sources

したがって、次のようなPOMがあります。

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>add-test-source</id>
                    <phase>generate-test-sources</phase>
                    <goals>
                        <goal>add-test-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <directory>src/test/java8</directory>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <version>2.9</version>
            <executions>
                <execution>
                    <phase>generate-test-sources</phase>
                    <goals>
                        <goal>eclipse</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

mvn eclipse:eclipse完璧ではないことはわかっています。なぜなら、それがうまくいかなくても、人々は走ったり泣いたりするからです。また、フェーズmaven-eclipse-pluginを実行するものの一部として実行されます(つまり、人々が持っているカスタム設定をスチームロールしない場合はそれほど悪くはありませんが、問題がある場合は、このものをプロファイルに移動して、バインドすることができます)。ビルドの一部として実行されない別のフェーズ ( など) または新しいライフサイクル フェーズを作成します。generate-test-sourcesmvn clean installclean

于 2013-12-09T04:31:22.407 に答える