2011-08-17 126 views
11

我正在使用ant和TestNG 6.1.1,并且我的测试工作正常昨天很好。今天,当我尝试运行测试时,我得到一个涉及com/beust/jcommander/ParamException的NoClassDefFoundError。下面是输出:突然无法从ant运行TestNG测试([testng]引发:java.lang.ClassNotFoundException:com.beust.jcommander.ParameterException)

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

我还指定了完整的路径,没有运气的类。我检查过类路径,一切似乎都很好,有没有人有任何想法呢?

+0

好了,所以我增加了jcommander-1.17.jar到类路径中,我仍然得到同样的错误。 – anotherdjohnson

+0

现在我已经发布了这个让全世界都可以看到的东西,我发现jcommander实际上并不在类路径中。我确信我在那里看到了它,但肯定它丢失了。 现在它无法找到测试,不知道为什么,因为我已经三重检查了类路径,而且它绝对存在。 – anotherdjohnson

回答

8

如果你使用ant,JCommander应该在testng.jar里面,所以我想你的testng.jar文件可能已经损坏了。

+0

塞德里克,你是对的,我从网站上下载了testng.jar的一个副本,它工作得很好,没有jcommander jar。我们使用ivy显然它在缓存中有一个损坏的文件。我将不得不考虑如何照顾。 感谢您再次帮助我。 – anotherdjohnson

+0

很高兴听到它。仅供参考,'rm -rf〜/ .ivy2/org.testng'应该处理这个问题。 –

+1

塞德里克,事实证明,我使用的文件是在Maven 2存储库中的相同文件,因此从我的常青藤缓存中删除它并没有帮助。缓存中的文件存在问题,还是有其他问题? – anotherdjohnson

0

可能是testng.jar不在classpath中。

+0

正如我在我原来的帖子中提到的,我检查了课程路径。请参阅上面的Cedric的回应。 – anotherdjohnson

4

如果您使用的是Maven尝试添加这对你的pom.xml

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

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

你可以从这里下载:http://mvnrepository.com/artifact/com.beust/jcommander/1.27

OR,

JCommander应该是内部testng.jar使用Ant中。您的testng.jar文件可能已损坏,请将旧的testng.jar替换为新的。

0

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

我应该更加关注方向上TestNG's download page ...

TestNG中的最新版本可从Maven的中央这里下载蚂蚁用户

0

我的蚂蚁开始工作时,我从 Maven仓库下载jcommandar罐子,在我的jar文件

加入它,但这个问题 从这里开始使用TestNG未来6.8.5版本

0

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

添加Jcommander罐子到类路径,当你运行它会解决这个问题,希望