Java Jar Hölle Runtime Ausnahme

Ich bin mit dem Problem konfrontiert, während ich den Komponententest durchführe.

java.lang.RuntimeException: found jar hell in test classpath at org.elasticsearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:95) at org.elasticsearch.test.ESTestCase.(ESTestCase.java:99) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:585) Caused by: java.lang.IllegalStateException: jar hell! class: org.apache.commons.io.CopyUtils jar1: C:\Users\vvenkatasubbu\.gradle\caches\modules-2\files-2.1\commons-io\commons-io\1.3.2\b6dde38349ba9bb5e6ea6320531eae969985dae5\commons-io-1.3.2.jar jar2: C:\Users\vvenkatasubbu\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-io\1.3.2\b6dde38349ba9bb5e6ea6320531eae969985dae5\commons-io-1.3.2.jar at org.elasticsearch.bootstrap.JarHell.checkClass(JarHell.java:282) at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:186) at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:87) at org.elasticsearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:93) ... 4 more 

Ich habe den Fehler wie oben, triggerse diese durch Entfernen der unnötigen JAR-Datei.

Aber ich bin mit dem Problem konfrontiert mit den folgenden beiden Jar nämlich tomcat-embed-core-8.0.36.jar und Hibernate-jpa-2.1-api-1.0.0.Final.jar. Es gibt eine gemeinsame class zwischen diesen beiden Ich brauche beide die JAR-Datei, kann mir jemand erklären, wie das Problem zu lösen. Ich brauche beide die JAR-Datei.

 java.lang.RuntimeException: found jar hell in test classpath at org.elasticsearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:95) at org.elasticsearch.test.ESTestCase.(ESTestCase.java:99) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:585) Caused by: java.lang.IllegalStateException: jar hell! class: javax.persistence.PersistenceProperty jar1: C:\Users\vvenkatasubbu\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\8.0.36\de87fa65671daad59773c8280eeabbd335f42c\tomcat-embed-core-8.0.36.jar jar2: C:\Users\vvenkatasubbu\.gradle\caches\modules-2\files-2.1\org.hibernate.javax.persistence\hibernate-jpa-2.1-api\1.0.0.Final\5e731d961297e5a07290bfaf3db1fbc8bbbf405a\hibernate-jpa-2.1-api-1.0.0.Final.jar at org.elasticsearch.bootstrap.JarHell.checkClass(JarHell.java:282) at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:186) at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:87) at org.elasticsearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:93) ... 4 more 

Danke im Voraus.

Ich habe es behoben, indem ich die JarHell-class im Unit-Test-Sorce-Ordner überschrieben habe.

Schritte, die ich getan habe

  1. Erstellen Sie ein separates Paket im Testordner.

    org.elasticsearch.bootstrap

  2. Erstellen Sie eine neue class und fügen Sie den folgenden Code ein.

     package org.elasticsearch.bootstrap; import java.net.URL; public class JarHell { private JarHell() {} public static void checkJarHell() throws Exception {} public static void checkJarHell(URL urls[]) throws Exception {} public static void checkVersionFormat(String targetVersion) {} public static void checkJavaVersion(String resource, String targetVersion) {} public static URL[] parseClassPath() {return new URL[]{};} } 

  3. Das Problem wurde behoben, während der Gradlew-Build gemacht wurde.

  4. Um den Integrationstest separat auszuführen, fügen Sie die folgende Zeile VM-Argumenten in den Ausführungskonfigurationen hinzu.

-ea -Dtests.security.manager=false