引起:java.lang.NoClassDefFoundError:com_atlassian_clover / TestNameSniffer

时间:2017-01-17 17:54:41

标签: java maven mockito clover

在启用了三叶草配置文件的情况下调用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

3 个答案:

答案 0 :(得分:3)

错误

filename

表示类路径上缺少Clover JAR(com.atlassian.clover:clover)。

这通常是由两个问题引起的:

  1. 缺少com.atlassian.clover:clover依赖项。请注意,Clover Maven插件会自动(在构建期间)将此依赖项添加到项目中。但是,在某些情况下,您必须手动将此依赖项添加到其他Maven插件 - 通常是分配新JVM的插件 - 例如用于容器内测试。

  2. 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;。

  3. 参考:

    干杯 马立克

答案 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 [...]

首先,让我说这个错误真的使我感到困惑,因为我确定项目的相同配置以前没有这个错误。

这是导致此错误的原因:

  • 出现错误的项目引用了我拥有的或我在maven存储库中构建并安装的依赖项。
  • 该依赖项是在“三叶草”运行期间mvn clean install-ed的,也就是说,.m2 /存储库中的版本已编译了一些三叶草代码。

当然,这导致另一个项目引入了三叶草编码的代码,而没有必需的依赖性。

一旦我从.m2 /存储库中删除了依赖项,从而将其从Maven Central中拉出(干净且没有三叶草代码),问题就消失了。

编辑:刚刚看到他是Mareks回答中的第二起案件。