突然可以';t从ant运行TestNG测试([TestNG]由以下原因引起:java.lang.ClassNotFoundException:com.beust.jcommander.ParameterException)

突然可以';t从ant运行TestNG测试([TestNG]由以下原因引起:java.lang.ClassNotFoundException:com.beust.jcommander.ParameterException),ant,testng,Ant,Testng,我正在使用ant和TestNG 6.1.1,昨天我的测试运行得很好。今天,当我尝试运行测试时,我得到一个NoClassDefFoundError,涉及com/beust/jcommander/parametException。以下是输出: [copy] Copying 1 file to /Users/djohnson/src/webapp/components/build/tmp [testng] Exception in thread "main" java.lang.NoClassDefF

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

[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>


我还指定了该类的完整路径,但没有运气。我已经检查了类路径,似乎一切正常,有人对此有什么想法吗?

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

可能是testng.jar不在类路径中。

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

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

com.beust
jcommander
1.30
jcommander.jar(例如jcommander-1.29.jar)应该出现在build.xml中提到的文件集目录中

您可以从以下网站下载:

或者


在使用ant期间,JCommander应该位于testng.jar内。您的testng.jar文件可能已损坏,因此请将旧的testng.jar替换为新的testng.jar。

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

我应该多注意一下……的方向

TestNG的最新版本可从Maven Central此处为ant用户下载


我的ant在从下载jcommandar jar后开始工作 Maven存储库并将其添加到我的jar文件中

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

这里的问题是testng jar的某些版本中没有jcommander jar代码。因此,您必须将类路径单独添加到Jcommander jar中


运行类路径时将Jcommander jar添加到类路径将解决问题,希望

好吧,因此我将Jcommander-1.17.jar添加到类路径中,仍然会遇到相同的错误。现在我已经发布了这篇文章,让全世界都能看到,我发现Jcommander实际上不在类路径中。我确信我在那里看到了它,但确实它不见了。现在它找不到测试,不知道为什么,因为我已经三次检查了类路径,它肯定在那里。Cedric,你是对的,我从网站下载了testng.jar的副本,没有jcommander jar,它工作得很好。我们使用的是常春藤,所以很明显它的缓存中有一个损坏的文件。我得研究一下如何处理这件事。再次感谢你帮助我。很高兴听到这个消息。仅供参考,
rm-rf~/.ivy2/org.testng
应该会解决这个问题。Cedric,我使用的文件与Maven 2存储库中的文件相同,因此从我的ivy缓存中删除它没有帮助。缓存中的文件是否存在问题,或者是否存在其他问题?我也遇到了这个问题。根据Cedric Beust的指导,我用新的testng.jar替换了旧的testng.jar。正如我在最初的帖子中提到的,我检查了类路径。请参见上述Cedric的回复。