获取java.lang.ClassNotFoundException:org.testng.TestNG错误

时间:2019-02-13 14:41:14

标签: java testing automation automated-tests

我正在尝试使用以下代码从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

2 个答案:

答案 0 :(得分:2)

这里的问题是,执行jar时,您缺少类路径上的依赖库,因为jar仅包含您项目中的类。

您需要的是

  
      
  1. 构建具有所有依赖项的可执行jar
  2.   

  
      
  1. 在命令行上指定依赖项
  2.   

例如     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}