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

您可以在 central.maven.org -> 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 我提到要继续。祝一切顺利!!