Getting "java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException"Exception
Getting "java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException"Exception
我想以编程方式调用 testng。不是eclipse插件。
我已经通过 eclipse 关联了 "testng-6.8.21.jar" 和 运行,并且我 运行 下面的代码:
import org.testng.TestNG;
public class SampCls
{
public static void main(String[] args)
{
TestNG test=new TestNG();
}
}
低于异常。我怎样才能克服这个异常。
Exception in thread "main" java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException
at SampCls.main(SampCls.java:12)
Caused by: java.lang.ClassNotFoundException: com.beust.jcommander.ParameterException
at java.net.URLClassLoader.run(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
如果您使用 Maven 项目,您需要添加此依赖项:
<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>1.48</version>
</dependency>
classcom/beust/jcommander/ParameterException在里面
如果您使用一个没有 Maven 的项目,您需要在您的class路径中添加这个 jar 文件:
jcommander-1.48.jar
下载此 jar 文件
变化:
Class cls = Class.forName("TestSuite.TestCases.AddContactHappyPath").getClass();
test.setTestClasses(new Class[] { cls });
作者:
test.setTestClasses(new Class[] { AddContactHappyPath.class });
全部代码为
import org.testng.TestNG;
import com.xxx.test.others.AddContactHappyPath;
public class SampCls {
public static void main(String[] args) throws ClassNotFoundException {
TestNG test = new TestNG();
test.setTestClasses(new Class[] { AddContactHappyPath.class });
test.run();
}
}
TestNG代码为:
import org.testng.annotations.*;
public class AddContactHappyPath {
@Test()
public void AddContactHappyPathTest() {
System.out.println("hello world");
}
}
控制台结果:
[TestNG] Running:
Command line suite
hello world
===============================================
Command line suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
正如@sgrillon 正确指出的那样,您需要正确的 Maven 依赖项,还需要 shade 插件 (https://maven.apache.org/plugins/maven-shade-plugin) 来打包包含所有 Maven 依赖项的 Uber-jar,以便于执行。
这是您的 pom.xml
:
中应包含的内容
...
<dependencies>
<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>1.48</version>
</dependency>
</dependencies>
...
<plugins>
...
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>runnable</shadedClassifierName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
构建 Maven 包后,您将获得常规 my-app-1.0-SNAPSHOT.jar
文件和 my-app-1.0-SNAPSHOT-runnable.jar
。
这是你应该运行,使用命令:
$ java -jar my-app-1.0-SNAPSHOT-runnable.jar
你可以用这个命令来验证:
$ jar tvf my-app-1.0-SNAPSHOT-runnable.jar
阴影 jar 包含 JCommander 类(以及所有其他 Maven 依赖项),而常规 jar 不包含。
我的解决方案是安装 TestNg。我参考了这个 link here. As I was using latest version of eclipse, Eclipse MarketPlace option didn't work for me, if it works for you then great. Else goto Help -> Install new software and work with http://dl.bintray.com/testng-team/testng-eclipse-release/ 安装后参考 1st link 我提到要继续。祝一切顺利!!
我想以编程方式调用 testng。不是eclipse插件。
我已经通过 eclipse 关联了 "testng-6.8.21.jar" 和 运行,并且我 运行 下面的代码:
import org.testng.TestNG;
public class SampCls
{
public static void main(String[] args)
{
TestNG test=new TestNG();
}
}
低于异常。我怎样才能克服这个异常。
Exception in thread "main" java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException
at SampCls.main(SampCls.java:12)
Caused by: java.lang.ClassNotFoundException: com.beust.jcommander.ParameterException
at java.net.URLClassLoader.run(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
如果您使用 Maven 项目,您需要添加此依赖项:
<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>1.48</version>
</dependency>
classcom/beust/jcommander/ParameterException在里面
如果您使用一个没有 Maven 的项目,您需要在您的class路径中添加这个 jar 文件:
jcommander-1.48.jar
下载此 jar 文件
变化:
Class cls = Class.forName("TestSuite.TestCases.AddContactHappyPath").getClass();
test.setTestClasses(new Class[] { cls });
作者:
test.setTestClasses(new Class[] { AddContactHappyPath.class });
全部代码为
import org.testng.TestNG;
import com.xxx.test.others.AddContactHappyPath;
public class SampCls {
public static void main(String[] args) throws ClassNotFoundException {
TestNG test = new TestNG();
test.setTestClasses(new Class[] { AddContactHappyPath.class });
test.run();
}
}
TestNG代码为:
import org.testng.annotations.*;
public class AddContactHappyPath {
@Test()
public void AddContactHappyPathTest() {
System.out.println("hello world");
}
}
控制台结果:
[TestNG] Running:
Command line suite
hello world
===============================================
Command line suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
正如@sgrillon 正确指出的那样,您需要正确的 Maven 依赖项,还需要 shade 插件 (https://maven.apache.org/plugins/maven-shade-plugin) 来打包包含所有 Maven 依赖项的 Uber-jar,以便于执行。
这是您的 pom.xml
:
...
<dependencies>
<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>1.48</version>
</dependency>
</dependencies>
...
<plugins>
...
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>runnable</shadedClassifierName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
构建 Maven 包后,您将获得常规 my-app-1.0-SNAPSHOT.jar
文件和 my-app-1.0-SNAPSHOT-runnable.jar
。
这是你应该运行,使用命令:
$ java -jar my-app-1.0-SNAPSHOT-runnable.jar
你可以用这个命令来验证:
$ jar tvf my-app-1.0-SNAPSHOT-runnable.jar
阴影 jar 包含 JCommander 类(以及所有其他 Maven 依赖项),而常规 jar 不包含。
我的解决方案是安装 TestNg。我参考了这个 link here. As I was using latest version of eclipse, Eclipse MarketPlace option didn't work for me, if it works for you then great. Else goto Help -> Install new software and work with http://dl.bintray.com/testng-team/testng-eclipse-release/ 安装后参考 1st link 我提到要继续。祝一切顺利!!