2017-01-17 6 views
2

Fehler beim Aufrufen von TestNG-Unit-Testfällen mit aktiviertem Clover-Profil. Habe keine Kleeblatt-Version geändert. Keine Ahnung, warum es passiert.verursacht durch: java.lang.NoClassDefFoundError: com_atlassian_clover/TestNameSniffer

Hier ist meine Libs Details - Klee-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

, dass nicht einmal ein gültiger Klassenname ist. Ändern Sie die Unterbalken und den Schrägstrich in Punkte. – EJP

+0

@EJP Es ist eigentlich ein echter Klassenname. Warum es so verwirrend genannt wird, habe ich keine Ahnung. Schande über dich, Atlassian. –

+0

Der mit dem Schrägstrich ist kein echter oder sogar legaler Klassenname. – EJP

Antwort

0

So endlich was hier half mir das Hinzufügen eines weiteren Abhängigkeit von Klee in Abhängigkeiten Tag. Ich hatte diese Abhängigkeit bereits als Teil des Clover-Profils. Aber ich habe immer noch den oben genannten Fehler gemeldet.

Nach einigen Stunden, wenn ich noch einmal die gleiche Abhängigkeit neben allen anderen Bibliotheken hinzugefügt. Wie ich in Gedanken war. Und auf magische Weise hat es funktioniert.

Hier ist meine aktualisierte pom.xml mit beiden Abhängigkeits Kopien -

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

Und dann alle anderen Abhängigkeiten -

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

Der Fehler

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

Mittel th im Clover JAR (com.atlassian.clover: clover) fehlt der Klassenpfad.

Dieser in der Regel durch zwei Faktoren verursacht: Klee Abhängigkeit:

  1. com.atlassian.clover fehlt. Bitte beachten Sie, dass das Clover Maven Plugin diese Abhängigkeit dem Projekt automatisch hinzufügt (während des Builds). In einigen Fällen müssen Sie diese Abhängigkeit jedoch manuell zu anderen Maven-Plugins hinzufügen - normalerweise zu denen, die neue JVMs forcen - zum Beispiel für In-Container-Tests.

  2. Build wird ausgeführt, obwohl Clover deaktiviert ist, dieser Fehler jedoch weiterhin auftritt. Dies geschieht normalerweise, wenn Sie den Build mit aktiviertem Clover über 'clover: setup' ausführen und JARs neu installieren (oder bereitstellen). Wenn Sie Ihren Build erneut ausführen, aber diesmal mit deaktiviertem Clover, kann der Build diese JARs aus Ihrem ~/.m2-Cache abrufen. Da diese JARs instrumentierten Code enthalten und com.atlassian.clover: clover fehlt, schlägt der Build fehl. Um dieses Problem zu beheben, bereinigen Sie Ihren ~/.m2-Cache und verwenden Sie "clover: setup" nicht mit "install" oder "deploy".

Referenz:

Prost Marek

Verwandte Themen