2017-01-17 319 views
2

在啓用三葉草配置文件的情況下調用TestNG單元測試用例時出現以下錯誤。沒有改變任何三葉草版本。沒有得到任何線索爲什麼發生。引起:java.lang.NoClassDefFoundError:com_atlassian_clover/TestNameSniffer

這裏是我的庫詳細信息 - 三葉草-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

這甚至不是一個有效的類名。將下劃線和斜槓更改爲點。 – EJP

+0

@EJP它實際上是一個真正的類名。至於爲什麼它的名字很混亂,我不知道。對你感到羞恥,Atlassian。 –

+0

帶斜線的那個不是真正的甚至是合法的類名。 – EJP

回答

0

所以最後什麼也幫我在這裏是增加在依賴標籤三葉草的另一種依賴性。我已經有這種依賴作爲三葉草配置文件的一部分。但是我仍然得到了上面報告的錯誤。

花了幾個小時之後,我再添加一個相同的依賴關係旁邊所有其他庫。因爲我沒有想過。神奇的是它確實有效。

這是我更新的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> 
... 
1

錯誤

Caused by: java.lang.NoClassDefFoundError: com_atlassian_clover/TestNameSniffer 

手段日在Clover JAR(com.atlassian.clover:clover)上缺少類路徑。

這通常是由兩個問題:

  1. 缺少com.atlassian.clover:三葉草依賴。請注意,Clover Maven插件會自動將此依賴項添加到項目中(在構建過程中)。但是,在某些情況下,您必須手動將此依賴項添加到其他Maven插件 - 通常是分叉新JVM的那些插件 - 例如容器內測試。

  2. 構建運行時禁用了Clover,但仍然無法執行此錯誤。如果通過'clover:setup'啓用Clover並且下一次安裝(或部署)創建的JAR來運行構建,通常會發生這種情況。當你再次運行你的構建時,但是這次禁用Clover時,構建可以從〜/ .m2緩存中獲取這些JAR。由於這些JAR包含儀器化代碼和com.atlassian.clover:缺少三葉草,構建將失敗。要解決這個問題,請清理〜/ .m2緩存,並且不要在「install」或「deploy」中使用「clover:setup」。

參考:

乾杯 馬立克

相關問題