问题 突然无法从ant运行TestNG测试([testng]引起:java.lang.ClassNotFoundException:com.beust.jcommander.ParameterException)


我正在使用ant和TestNG 6.1.1,昨天我的测试工作得很好。今天当我尝试运行测试时,我得到一个涉及com / beust / jcommander / ParamException的NoClassDefFoundError。这是输出:

[copy] Copying 1 file to /Users/djohnson/src/webapp/components/build/tmp
[testng] Exception in thread "main" java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException
[testng] Caused by: java.lang.ClassNotFoundException: com.beust.jcommander.ParameterException
[testng]    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
[testng]    at java.security.AccessController.doPrivileged(Native Method)
[testng]    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
[testng]    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
[testng]    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[testng]    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
[testng] The tests failed.

这是我正在使用的.xml文件:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Single Method Suite">
  <test name="Single Method Test">
    <classes>
      <class name="DhcpTest">
        <methods>
          <exclude name=".*" />
          <include name="setGetEnabledTest" />
        </methods>
      </class>
    </classes>
  </test>
</suite>

我也为这个班级指定了完整的路径而没有运气。我检查了类路径,一切似乎都很好,有没有人对此有任何想法?


13047
2017-08-17 23:43


起源

好的,所以我将jcommander-1.17.jar添加到了类路径中,我仍然得到了同样的错误。 - anotherdjohnson
现在我已经发布了这个让全世界都能看到,我发现jcommander实际上并不在类路径中。我确信我在那里看到了它,但果然它丢失了。现在它找不到测试,不知道为什么,因为我已经三次检查了类路径,它肯定存在。 - anotherdjohnson


答案:


如果您正在使用ant,JCommander应该在testng.jar中,所以我认为您的testng.jar文件可能已损坏。


8
2017-08-18 00:30



塞德里克,你是对的,我从网站上下载了一个testng.jar的副本,它工作得很好,没有一个jcommander jar。我们正在使用常春藤,显然它在缓存中有一个损坏的文件。我必须考虑得到这个照顾。谢谢你再次帮助我。 - anotherdjohnson
听到那个消息很开心。仅供参考, rm -rf ~/.ivy2/org.testng 应该照顾好这个问题。 - Cedric Beust
Cedric,事实证明我正在使用的文件与Maven 2存储库中的文件相同,因此从常春藤缓存中删除它无济于事。缓存中的文件是否有问题,或者此处还有其他问题? - anotherdjohnson
我也遇到过这个问题。根据Cedric Beust的指导,我用新的替换了旧的testng.jar。它运作良好。 - Ripon Al Wasim


如果您使用Maven尝试将其添加到您的pom.xml中

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

4
2017-11-19 20:14





jcommander.jar(例如jcommander-1.29.jar)应该存在于build.xml目录中,该目录在build.xml中提到

您可以从以下位置下载: http://mvnrepository.com/artifact/com.beust/jcommander/1.27

要么,

使用蚂蚁时,JCommander应该在testng.jar里面。你的testng.jar文件可能已损坏,所以请用新的替换旧的testng.jar。


3
2018-02-25 10:00





可能是testng.jar不在classpath中。


0
2017-07-16 13:49



正如我在原帖中所提到的,我检查了类路径。请参阅塞德里克上面的回复。 - anotherdjohnson


我在非Maven项目中遇到了同样的问题。我从Maven Central检索了testng jar,但它并没有包含所有TestNG的依赖项。直接从TestNG站点下载jar解决了问题,因为它包含依赖项。

我应该更加注意方向 TestNG的下载页面...

可以从中下载最新版本的TestNG Maven Central 要么 这里是蚂蚁用户


0
2017-11-18 16:44





这里的问题是某些版本的testNG jar里面没有jcommander jar代码。因此,您必须分别将类路径添加到Jcommander jar。

在运行它时将Jcommander jar添加到类路径中将有望解决问题


0
2018-06-04 22:40





当我从中下载jcommandar jar时,我的蚂蚁开始工作了 Maven存储库并将其添加到我的jar文件中

但是这个问题 开始使用testng 6.8.5版本


0
2018-06-03 19:39