bugfix> java > 投稿

pom.xmlの実行中にjava.lang.NoClassDefFoundErrorを取得し、maven依存関係のmaven surefireプラグインを更新し、mavenバージョンを更新しましたが、それでもエラーが発生しました。

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building eGem 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for org.testng:testng:jar:5.14.3 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] The POM for org.testng:testng:jar:5.14.4 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] The POM for org.testng:testng:jar:5.14.5 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] The POM for com.beust:jcommander:jar:1.66 is missing, no dependency information available
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ eGem ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 13 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ eGem ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ eGem ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 12 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.5.1:testCompile (default-testCompile) @ eGem ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ eGem ---
[WARNING] Error injecting: org.apache.maven.plugin.surefire.SurefirePlugin
java.lang.NoClassDefFoundError: org/apache/maven/surefire/util/NestedCheckedException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)

回答 1 件
  • 構成セクションを追加して機能するかどうかを確認するか、デバッグモードでmavenを実行してさらにデバッグします。

    <project>
          [...]
          <build>
            <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.21.0</version>
                <configuration>
                  <useSystemClassLoader>false</useSystemClassLoader>
                </configuration>
              </plugin>
            </plugins>
          </build>
          [...]
        </project>
    
    

    クラスパスの問題のデバッグ 試す一般的なヒントを次に示します。

    --debug(または同等の-X)を指定してMavenを実行し、詳細を取得します 出力forkCountを確認します。 forkCount = 0(またはforkMode = neverの場合、 非推奨バージョン)、システムクラスを使用することは不可能です ローダーまたは単純な古いJavaクラスパス。孤立したものを使用する必要があります クラスローダー。

    デフォルトを使用している場合は、useSystemClassLoader = trueおよび useManifestOnlyJar = false。その場合、生成された マニフェストのみのSurefireブートJAR。開いて(ただのzipです)、 マニフェストを読んでください。

    -Dmaven.surefire.debugを使用してMavenを実行し、実行中の デバッガーで処理します。

あなたの答え