6

Surefire v2.12 を使用する必要がありますが、そのバージョンを実行するたびに添付のスタック トレースを取得します。v2.10 を実行すると、エラーは発生しません。このバージョンが必要なのは、テスト クラスに @Category で注釈を付けて、それらを UnitTests または IntegrationTests としてラベル付けできるようにするためです。ここに私のコマンドがあります: mvn test -Dsurefire.version=2.12 -X

    [エラー] プロジェクト PROJECT で目標 org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) を実行できませんでした: 目標 org.apache.maven.plugins:maven-surefire の default-test を実行します-プラグイン: 2.12: テストに失敗しました: java.lang.reflect.InvocationTargetException; ネストされた例外は java.lang.reflect.InvocationTargetException: null: ExceptionInInitializerError: クラス 'org.apache.maven.cli.MavenCli' を検索する予期しない ClassNotFoundException です -> [ヘルプ 1]
org.apache.maven.lifecycle.LifecycleExecutionException: プロジェクト ASPEN でゴール org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) を実行できませんでした: ゴール org.apache のデフォルト テストを実行します。 maven.plugins:maven-surefire-plugin:2.12:テストに失敗しました: java.lang.reflect.InvocationTargetException; ネストされた例外は java.lang.reflect.InvocationTargetException: null です
    org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:225) で
    org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153) で
    org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:145) で
    org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:84) で
    org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:59) で
    org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild (LifecycleStarter.java:183) で
    org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:161) で
    org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:320) で
    org.apache.maven.DefaultMaven.execute (DefaultMaven.java:156) で
    org.apache.maven.cli.MavenCli.execute (MavenCli.java:537) で
    org.apache.maven.cli.MavenCli.doMain (MavenCli.java:196) で
    org.apache.maven.cli.MavenCli.main (MavenCli.java:141) で
    sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で
    java.lang.reflect.Method.invoke(Method.java:597) で
    org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:290) で
    org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:230) で
    org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:409) で
    org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:352) で
    原因: org.apache.maven.plugin.PluginExecutionException: 実行 default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test failed: java.lang.reflect.InvocationTargetException; ネストされた例外は java.lang.reflect.InvocationTargetException: null です
    org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:110) で
    org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:209) で
    ... 19件以上
    原因: org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException; ネストされた例外は java.lang.reflect.InvocationTargetException: null です
    org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray (ReflectionUtils.java:197) で
    org.apache.maven.surefire.util.ReflectionUtils.invokeGetter (ReflectionUtils.java:69) で
    org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.getSuites (ProviderFactory.java:148) で
    org.apache.maven.plugin.surefire.booterclient.ForkStarter.getSuitesIterator (ForkStarter.java:317) で
    org.apache.maven.plugin.surefire.booterclient.ForkStarter.runSuitesForkPerTestSet(ForkStarter.java:149) で
    org.apache.maven.plugin.surefire.booterclient.ForkStarter.run (ForkStarter.java:118) で
    org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider (AbstractSurefireMojo.java:199) で
    org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAllProviders (AbstractSurefireMojo.java:176) で
    org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked (AbstractSurefireMojo.java:135) で
    org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute (AbstractSurefireMojo.java:98) で
    org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:101) で
    ... 20以上
    原因: java.lang.reflect.InvocationTargetException
    sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で
    java.lang.reflect.Method.invoke(Method.java:597) で
    org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray (ReflectionUtils.java:189) で
    ... 30以上
    原因: java.lang.ExceptionInInitializerError
    ... 2以上
    at java.lang.Class.forName0(ネイティブメソッド)
    java.lang.Class.forName(Class.java:169) で
    org.junit.runner.Description.getTestClass(Description.java:207) で
    org.apache.maven.surefire.common.junit48.FilterFactory$GroupMatcherCategoryFilter.shouldRun (FilterFactory.java:207) で
    org.apache.maven.surefire.junitcore.JUnitCoreProvider.getSuitesAsList (JUnitCoreProvider.java:169) で
    org.apache.maven.surefire.junitcore.JUnitCoreProvider.getSuites (JUnitCoreProvider.java:102) で
    ... 35以上
    原因: java.lang.RuntimeException: クラス 'org.apache.maven.cli.MavenCli' をルックアップする予期しない ClassNotFoundException
    ... 12以上

    (ここで削除された行)

私のpom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
    <artifactId>sample</artifactId>
    <groupId>sample</groupId>
    <version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>webapp</artifactId>
<packaging>war</packaging>
<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${org.slf4j-version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${org.slf4j-version}</version>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>
    </dependency>
</dependencies>
<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>2.5.1</version>
        </plugin>
    </plugins>
</reporting>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit47</artifactId>
                    <version>${surefire.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <configuration>
                <groups>com.webapp.api.annotation.type.${group.include}</groups>
                <excludedGroups>com.webapp.api.annotation.type.${group.exclude}</excludedGroups>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

また、スクラップから設定した別のプロジェクトでこれを行うことができました。しかし、この場合、ご覧のとおり、確実なプラグインのバージョンを上書きしています。

何か案は?

ありがとう

4

1 に答える 1

1

バージョンをこの pom に入れてみませんか。なぜなら、この pom はあなたによって制御されているからです。あなたのプロジェクトを使用する他の人は、コマンド ラインでプロパティを指定するのを忘れたため、プロジェクトが機能しないことに驚くでしょう。ところで: mvn -X -Dsurefire.version=2.12 などで出力を確認しましたか。同じエラー メッセージが表示されると思います。

再確認しましたが、そのようにバージョンを定義すると、プロジェクトが正しくなくなり、誰かがコマンドラインでオプション (-D...) を見逃した場合、次のような結果が得られます。

INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project com.soebes.katas:code:1.0-SNAPSHOT (/home/katas/pom.xml) has 1 error
[ERROR]     'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin must be a valid version but is '${surefire.version}'. @ line 36, column 20
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException

言い換えれば、コマンドラインのオプションを介してプラグインのバージョン (またはその依存関係) を定義するのは本当に悪い考えです。必要なものすべてのバージョンを pom に定義し、surefire および/または failsafe プラグインを介して単体テストおよび統合テストを正しく使用することをお勧めします。これで問題が解決します。

于 2012-07-07T16:19:20.813 に答える