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が無効である可能性があると示唆している他のスレッドを使用してみましたが、助けにはなりませんでした。質問に直接答えること