web-dev-qa-db-ja.com

「Java.lang.NoClassDefFoundError:com / beust / jcommander / ParameterException」例外の取得

プログラムでtestngを呼び出したかったのです。 Eclipseプラグインではありません。

「testng-6.8.21.jar」を関連付けてEclipseで実行し、以下のコードを実行しました。

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$1.run(Unknown Source)
    at Java.net.URLClassLoader$1.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
4
Uday

変更:

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
===============================================
2
sgrillon

Mavenプロジェクトを使用する場合は、次の依存関係を追加する必要があります。

<dependency>
    <groupId>com.beust</groupId>
    <artifactId>jcommander</artifactId>
    <version>1.48</version>
</dependency>

クラスcom/beust/jcommander/ParameterExceptionは内部にあります

Mavenのないプロジェクトを使用する場合は、クラスパスに次のjarファイルを追加する必要があります。

jcommander-1.48.jar

このjarファイルは central.maven.org-> jcommander-1.48.jar からダウンロードできます。

10
sgrillon

私にとっての解決策は、TestNgをインストールすることでした。私はこのリンクを参照しました ここ 。私は最新バージョンのEclipseを使用していたので、EclipseMarketPlaceオプションは私には機能しませんでした。それ以外の場合は、ヘルプ->新しいソフトウェアをインストールして操作します http://dl.bintray.com/testng-team/testng-Eclipse-release/ インストール後、続行するために言及した最初のリンクを参照してください。ではごきげんよう !!

0
Krunal Patil

@sgrillonが正しく指摘しているように、正しいMaven依存関係が必要ですが、Uber-をパッケージ化するにはシェードプラグイン( https://maven.Apache.org/plugins/maven-shade-plugin )も必要です。簡単に実行できるように、すべてのMaven依存関係を含む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には含まれていません。

0
PJ_Finnegan