在启用了三叶草配置文件的情况下调用TestNG单元测试用例时出现以下错误。没有改变任何三叶草版本。没有任何线索为什么会发生这种情况。
这是我的libs详细信息 - clover-4.0.3,testng-6.0.1,maven 3
Caused by: java.lang.NoClassDefFoundError: com_atlassian_clover/TestNameSniffer
at com.mds404.catalog.infrastructure.entity.ModelBase.<clinit>(ModelBase.java:27)
at sun.reflect.GeneratedSerializationConstructorAccessor1.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:40)
at org.objenesis.ObjenesisBase.newInstance(ObjenesisBase.java:59)
at org.mockito.internal.creation.jmock.ClassImposterizer.createProxy(ClassImposterizer.java:111)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:51)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:52)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:41)
at org.mockito.Mockito.mock(Mockito.java:1014)
at org.mockito.Mockito.mock(Mockito.java:909)
at com.mds404.rest.v2.controller.BaseControllerTest.<init>(BaseControllerTest.java:107)
... 33 more
Caused by: java.lang.ClassNotFoundException: com_atlassian_clover.TestNameSniffer
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.maven.surefire.booter.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:97)
... 46 more
答案 0 :(得分:3)
错误
filename
表示类路径上缺少Clover JAR(com.atlassian.clover:clover)。
这通常是由两个问题引起的:
缺少com.atlassian.clover:clover依赖项。请注意,Clover Maven插件会自动(在构建期间)将此依赖项添加到项目中。但是,在某些情况下,您必须手动将此依赖项添加到其他Maven插件 - 通常是分配新JVM的插件 - 例如用于容器内测试。
Build已在禁用Clover的情况下运行,但仍然无法解决此错误。如果您通过&#39; clover:setup&#39;启用Clover运行构建,通常会发生这种情况。然后安装(或部署)创建的JAR。再次运行构建时,但这次禁用了Clover,构建可以从〜/ .m2缓存中获取这些JAR。由于这些JAR包含已检测的代码和com.atlassian.clover:缺少clover,因此构建将失败。要解决此问题,请清理〜/ .m2缓存,不要使用&#34; clover:setup&#34;用&#34;安装&#34;或者&#34;部署&#34;。
参考:
干杯 马立克
答案 1 :(得分:0)
所以最后在这里帮助我的是在依赖项标记中添加另一个clover依赖项。我已将此依赖项作为三叶草配置文件的一部分。但是我仍然报告错误。
花了几个小时后,我又在所有其他库旁边添加了一个相同的依赖项。因为我没有想到。神奇地它确实有效。
这是我更新的pom.xml,包含两个依赖项副本 -
...
<profile>
<id>clover</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-clover2-plugin</artifactId>
<version>4.0.3</version>
<configuration>
<methodContexts>
<toStr>(.* )?public .*(toString).*</toStr>
<hashCode>(.* )?public .*(hashCode).*</hashCode>
<equals>(.* )?public boolean equals\(Object.*\).*</equals>
<privateConstructors>(.* )?private +[a-zA-Z0-9]+ *\(\).*</privateConstructors>
</methodContexts>
<contextFilters>toStr,hashCode,equals,privateConstructors</contextFilters>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.atlassian.clover</groupId>
<artifactId>clover</artifactId>
<version>4.0.3</version>
</dependency>
</dependencies>
</profile>
然后是所有其他依赖项 -
....
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>com.atlassian.clover</groupId>
<artifactId>clover</artifactId>
<version>4.0.3</version>
</dependency>
...
答案 2 :(得分:0)
我偶然发现了这个错误,即运行我的单元测试
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.082 s <<< FAILURE! - in [...]
[ERROR] [...] Time elapsed: 0.017 s <<< ERROR!
java.lang.NoClassDefFoundError: com_atlassian_clover/TestNameSniffer
at [...]
Caused by: java.lang.ClassNotFoundException: com_atlassian_clover.TestNameSniffer
at [...]
首先,让我说这个错误真的使我感到困惑,因为我确定项目的相同配置以前没有这个错误。
这是导致此错误的原因:
mvn clean install
-ed的,也就是说,.m2 /存储库中的版本已编译了一些三叶草代码。当然,这导致另一个项目引入了三叶草编码的代码,而没有必需的依赖性。
一旦我从.m2 /存储库中删除了依赖项,从而将其从Maven Central中拉出(干净且没有三叶草代码),问题就消失了。
编辑:刚刚看到他是Mareks回答中的第二起案件。