JaCoCo Kann keine andere Klasse mit demselben Namen: org/hamcrest/BaseDescription
Hallo, ich bin schlagen die folgende Ausnahme beim ausführen einer JaCoCo-Berichterstattung:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.5.8.201207111220</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
Error while creating report: Can't add different class with same name: org/hamcrest/BaseDescription
java.lang.IllegalStateException: Can't add different class with same name: org/hamcrest/BaseDescription
at org.jacoco.core.analysis.CoverageBuilder.visitCoverage(CoverageBuilder.java:89)
at org.jacoco.core.analysis.Analyzer$1.visitEnd(Analyzer.java:79)
at org.objectweb.asm.ClassAdapter.visitEnd(Unknown Source)
at org.jacoco.core.internal.flow.ClassProbesAdapter.visitEnd(ClassProbesAdapter.java:128)
at org.objectweb.asm.ClassReader.accept(Unknown Source)
at org.objectweb.asm.ClassReader.accept(Unknown Source)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:94)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:115)
at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:155)
at org.jacoco.core.analysis.Analyzer.analyzeArchive(Analyzer.java:135)
at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:158)
at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:183)
at org.jacoco.maven.ReportMojo.createBundle(ReportMojo.java:280)
at org.jacoco.maven.ReportMojo.createReport(ReportMojo.java:256)
at org.jacoco.maven.ReportMojo.executeReport(ReportMojo.java:230)
at org.jacoco.maven.ReportMojo.execute(ReportMojo.java:208)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
- Circa 2018, und dieser wird wirklich relevant, Dank der multi-release-Gläser JEP-238
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt zwei Möglichkeiten, dies zu vermeiden:
1)Benennen Sie eines der Duplikate: ich habe gesehen, dass dieses problem ziemlich oft, wenn es um maven-Projekte. Selbst wenn diese zwei Klassen sind in zwei verschiedenen Modulen, die gleichen Namen für zwei verschiedene Klassen ist nicht wirklich eine gute Idee.
2)der Ausschluss eines von Ihnen: Siehe diese SO-thread für weitere Informationen.
Ich Stimme mit rb512. Noch ein Fall/Gebiet, wo es zu diesem Fehler gekommen ist, während der Kompilierung, wenn wir mit JIBX/WST etc oder ähnliche andere Schritte/Prozess erstellt dynamische class-Dateien (zur compile-Zeit), d.h., für die haben wir keine gültige entsprechende source-Datei (.java -/.groovy etc.) im Arbeitsbereich.
In diesem Fall von Ihrem Arbeitsbereich haben extra class-Datei(en) und, wenn jacoco wird versuchen, um den Bericht zu generieren, es werden Fehler ausgegeben, mit dem gleichen Fehler für eine doppelte Klasse. Wenn Sie diese Fehler wegen diesem Fall, müssen Sie entfernen Sie alle class-Dateien vor dem ausführen von jacoco reports
Wenn Sie mit Gradle (für Maven, das gleiche zu tun in der Maven-pom .xml-Datei) finden Sie die
doFirst
block unten tut den trick.Traf ich das gleiche Problem wie du. Es stellt sich heraus, ich hatte zwei Gläser in mein Projekt-Ordner, die die gleiche Sache Tat, auch wenn nur einer von Ihnen war in der build path. Prüfen Sie, ob Sie mehr als eine hamcrest-Glas in Ihrem code.