2017-04-18 5 views
0

試験:アリ+ TestNGの:スレッドの例外は、 "メイン" java.lang.NoClassDefFoundErrorが:(プロジェクトtests.jar中に存在する)COM/beust/jcommander/ParameterException

package sample; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.testng.annotations.Test; 
import utils.Base; 

public class SampleTest { 
    @Test 
    public void Test() { 
     log.info("Sample Test called successfully."); 

     log.info("Invoking Base Method"); 
     Base b = new Base(); 
     b.testMethod(); 
    } 
} 

使用率(プロジェクト内に存在します。 jar):

package utils; 

import org.apache.commons.configuration.HierarchicalConfiguration; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import java.util.Map.Entry; 

public class Base { 
    public void testMethod() { 
     log.info("Test method in utils.Base class called."); 
    } 
} 

ログがすでに作成され、両方のクラスで使用可能であるとします。

のbuild.xml:

<project default="TestNGSimpleTest"> 

    <path id="main_cp"> 
     <pathelement location="dependency/testng-6.9.10.jar"/> 
     <pathelement location="dependency"/> 
     <pathelement location="."/> 
    </path> 

    <taskdef name="testng" classpathref="main_cp" 
      classname="org.testng.TestNGAntTask" /> 

    <target name="test"> 
     <testng classpathref="main_cp" > 
      <classfileset dir="." includes="sample/*.class"/> 
     </testng> 
    </target> 

</project> 

ターゲットディレクトリ構造:

./dependency/{all-dependencies}.jar 
./project.jar 
./project-tests.jar 
./build.xml 

{すべての依存関係が}が含ま:私はIDEからSampleTestを実行すると

bsh-1.3.0.jar 
bsh-2.0b4.jar 
commons-beanutils-1.7.0.jar 
commons-beanutils-core-1.8.0.jar 
commons-collections-3.2.1.jar 
commons-configuration-1.6.jar 
commons-digester-1.8.jar 
commons-lang-2.4.jar 
commons-logging-1.1.1.jar 
jcommander-1.48.jar 
testng-6.9.10.jar 

それが正常に動作しますしかし、ant(ant -v test)を使って実行しようとすると、次のエラーが発生します。

[testng] The ' characters around the executable and arguments are 
[testng] not part of the command. 
[testng] Error: A JNI error has occurred, please check your installation and try again 
[testng] Exception in thread "main" java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException 
[testng] at java.lang.Class.getDeclaredMethods0(Native Method) 
[testng] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
[testng] at java.lang.Class.privateGetMethodRecursive(Class.java:3048) 
[testng] at java.lang.Class.getMethod0(Class.java:3018) 
[testng] at java.lang.Class.getMethod(Class.java:1784) 
[testng] at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) 
[testng] at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) 
[testng] Caused by: java.lang.ClassNotFoundException: com.beust.jcommander.ParameterException 
[testng] at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
[testng] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
[testng] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
[testng] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
[testng] ... 7 more 
[testng] The tests failed. 

私は問題がbuild.xmlの(私はIDEでそれを実行する可能性があるので)であると思いますが、なぜこのエラーを把握することはできません(java.lang.NoClassDefFoundErrorが:COM/beust/jcommander/ParameterException)とそれを修正する方法。クラスファイルを間違って指定していますか?これをどうすれば実行できますか?

testng jarが破損している可能性があり、jcommander jarが無効であり、classpathが無効である可能性があると示唆している他のスレッドを使用してみましたが、助けにはなりませんでした。質問に直接答えること

答えて

1

、あなたがmain_cp

<pathelement location="dependency/jcommander-1.48.jar"/> 

を含める必要があることと思われます。

この質問は、回答が古くなっている古いSuddenly can't run TestNG tests from ant ([testng] Caused by: java.lang.ClassNotFoundException: com.beust.jcommander.ParameterException)と重複しています。

実際、jcommanderは、ソナタイプスナップショットやgithub/graddle distribで生成するjarファイルには含まれていないようです。

したがって、testng antタグに渡されたパスにjcommander jarfileを追加する必要があります。

jcommanderのバージョンが古いようで、TestNGのタスクを宣言するための新しいrecommended wayは次のとおりです。

<taskdef resource="testngtasks" classpath="testng.jar" /> 
関連する問題