2

耳としてパッケージ化されたプロジェクトがあります。この 1 か月ほどの間、システム テストは無効になっています。それらを元に戻し、失敗したテストとビルド スクリプトの問題を修正しています。最新の問題を解決できませんでした:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.14.1:test (default-test) on project systemTest: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.14.1:test failed: A required class was missing while executing org.apache.maven.plugins:maven-surefire-plugin:2.14.1:test: org/junit/runner/notification/RunListener
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.apache.maven.plugins:maven-surefire-plugin:2.14.1
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/home/tomcat/.m2/repository/org/apache/maven/plugins/maven-surefire-plugin/2.14.1/maven-surefire-plugin-2.14.1.jar
[ERROR] urls[1] = file:/home/tomcat/.m2/repository/org/apache/maven/surefire/surefire-junit47/2.14.1/surefire-junit47-2.14.1.jar
[ERROR] urls[2] = file:/home/tomcat/.m2/repository/org/apache/maven/surefire/common-junit48/2.14.1/common-junit48-2.14.1.jar
[ERROR] urls[3] = file:/home/tomcat/.m2/repository/org/apache/maven/surefire/common-junit4/2.14.1/common-junit4-2.14.1.jar
[ERROR] urls[4] = file:/home/tomcat/.m2/repository/org/apache/maven/surefire/common-junit3/2.14.1/common-junit3-2.14.1.jar
[ERROR] urls[5] = file:/home/tomcat/.m2/repository/org/apache/maven/surefire/surefire-grouper/2.14.1/surefire-grouper-2.14.1.jar
[ERROR] urls[6] = file:/home/tomcat/.m2/repository/org/apache/maven/shared/maven-shared-utils/0.4/maven-shared-utils-0.4.jar
[ERROR] urls[7] = file:/home/tomcat/.m2/repository/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.jar
[ERROR] urls[8] = file:/home/tomcat/.m2/repository/org/apache/maven/surefire/common-java5/2.14.1/common-java5-2.14.1.jar
[ERROR] urls[9] = file:/home/tomcat/.m2/repository/org/apache/maven/surefire/maven-surefire-common/2.14.1/maven-surefire-common-2.14.1.jar
[ERROR] urls[10] = file:/home/tomcat/.m2/repository/org/apache/maven/surefire/surefire-booter/2.14.1/surefire-booter-2.14.1.jar
[ERROR] urls[11] = file:/home/tomcat/.m2/repository/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.jar
[ERROR] urls[12] = file:/home/tomcat/.m2/repository/org/apache/maven/reporting/maven-reporting-api/2.0.9/maven-reporting-api-2.0.9.jar
[ERROR] urls[13] = file:/home/tomcat/.m2/repository/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar
[ERROR] urls[14] = file:/home/tomcat/.m2/repository/org/apache/maven/surefire/surefire-api/2.14.1/surefire-api-2.14.1.jar
[ERROR] urls[15] = file:/home/tomcat/.m2/repository/org/apache/maven/plugin-tools/maven-plugin-annotations/3.2/maven-plugin-annotations-3.2.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[maven.api, parent: null]]
[ERROR] 
[ERROR] -----------------------------------------------------: org.junit.runner.notification.RunListener
[ERROR] -> [Help 1]

org/junit/runner/notification/RunListener が見つからない理由がわかりません。プロジェクト全体が maven でビルドjunitされ、テストの依存関係として含まれています。

私たちが知る限り、フル ビルドの実行は、ビルド サーバー以外のすべての場所で機能します。2 つ目の興味深い点として、ビルド サーバーでは、システム テストが含まれていない場合はすべて正常にビルドされ、システム テストは単独で実行すると正常に動作します。この問題は、システム テストを含む完全なプロジェクトがビルドされた場合にのみ発生します。

pom.xmlこれは、システム テストの関連部分です。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <includes>
            <include>com/crowncastle/test/*Test.class</include>
            <include>com/crowncastle/test/suite/*TestSuite.class</include>
        </includes>
        <additionalClasspathElements>
            <additionalClasspathElement>${basedir}${file.separator}..${file.separator}ear${file.separator}src${file.separator}main${file.separator}application${file.separator}APP-INF${file.separator}classes</additionalClasspathElement>
            <additionalClasspathElement>${basedir}${file.separator}..${file.separator}ff${file.separator}src${file.separator}main${file.separator}resources</additionalClasspathElement>
            <additionalClasspathElement>${basedir}${file.separator}..${file.separator}ff${file.separator}target${file.separator}classes</additionalClasspathElement>
            <additionalClasspathElement>${basedir}${file.separator}..${file.separator}ff${file.separator}target${file.separator}test-classes</additionalClasspathElement>
        </additionalClasspathElements>
        <forkMode>always</forkMode>
        <argLine>-Xmx1024m -XX:MaxPermSize=512m</argLine>
        <runOrder>alphabetical</runOrder>
        <redirectTestOutputToFile>true</redirectTestOutputToFile>
        <forkedProcessTimeoutInSeconds>900</forkedProcessTimeoutInSeconds>
    </configuration>
</plugin>

更新問題を引き起こしている可能性 のある古いバージョンのjunitぶらぶらしている可能性があると思ったので、実行mvn dependency:analyzemvn dependency:treeましたが、唯一の言及はjunit適切junit 4.10なバージョンである です。

更新 テスト ビルド サーバーで問題を再現することができました。開発者ワークステーションが Windows 8 を実行し、ビルド サーバーが Linux であることは前に触れませんでした。したがって、WindowsとLinuxの問題である可能性がありますが、何がわかりません。

4

2 に答える 2

2

今日、開発環境の再構築中に同様の問題が発生しました。少数の jar ファイルが正しくダウンロードされませんでした。Maven リポジトリから問題のフォルダーをスポット削除することで、続行することができました。これにより、maven はそれらを再度ダウンロードすることを余儀なくされ、問題なく動作しました。

この場合、私は削除しました:

{local_repo}\org\apache\maven\plugins\maven-surefire-plugin

于 2013-09-05T16:07:36.767 に答える
2

この問題は、次の 2 つの要因が組み合わさったものでした。

まず、(Maven の依存関係ツリーでは) 古い JUnit が systemTest モジュール (これはバージョンの依存関係を継承していました)、JUnit のリビジョン 3.8.1 には org.junit.runner.notification.RunListener が含まれていません。

第 2 に、maven によるタグの解釈に混乱がありまし<version>た。havingは、ハード要件ではなく、junitのソフト<version>4.10</version>要件を示します (これは ( Maven Dependency Mediation も参照) で示される可能性があります) 。<version>[4.10]</version>

後者により、maven は期待値ではなく「最も近い」満足のいく JUnit 依存関係 (この場合は 3.8) を受け入れるようになり、それによってエラーが発生しました。pom を [N.mm] 'hard' 構文に変更すると、この問題が解決します。

于 2013-09-06T14:34:03.797 に答える