我正在尝试使用以下代码从main方法执行我的testng.xml文件。但是得到一个NoClassDefFoundError。你知道是什么引起了这个问题吗?
public static void main( String[] args )
{
TestNG testng = new TestNG();
List<String> suites = Lists.newArrayList();
suites.add("testng.xml");
testng.setTestSuites(suites);
testng.run();
}
Exception in thread "main" java.lang.NoClassDefFoundError: org/testng/TestNG
at com.automation.app.App.main(App.java:21)
Caused by: java.lang.ClassNotFoundException: org.testng.TestNG
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
答案 0 :(得分:2)
这里的问题是,执行jar时,您缺少类路径上的依赖库,因为jar仅包含您项目中的类。
您需要的是
- 构建具有所有依赖项的可执行jar
或
- 在命令行上指定依赖项
例如
java -cp your.jar:lib/*
其中libs/*
是依赖JAR的路径
我建议选择一种方法,因为如果jar中包含所有依赖项,则可以在任何位置运行该jar。
答案 1 :(得分:1)
我能够通过使用“ maven-assembly-plugin”和“ maven-dependency-plugin”来解决此问题,然后在resources / meta-inf文件夹中创建manifest.mf文件并添加以下信息。
Manifest-Version: 1.0
Class-Path: .
Main-Class: {PROVIDE THE MAIN CLASS HERE}