# ElasticSearch 2.0 java api JarHell problems

**URL:** <https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776>\
**Category:** Elasticsearch\
**Created:** [November 17, 2015, 9:42am UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776 "2015-11-17T09:42:39Z")\
**Posts on this page:** 11\
**Page:** 2

<div class="post-metadata">

**Author:** ![plutogeek](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/plutogeek/32/9292_2.png) [@plutogeek](https://discuss.elastic.co/u/plutogeek)\
**Post date:** [April 20, 2016, 4:48pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/21 "2016-04-20T16:48:17Z")

</div>

I have also encounter this problem with IntelliJ when I tested the internalenginetest.

> /Library/Java/JavaVirtualMachines/jdk1.8.0\_77.jdk/Contents/Home/bin/java...

> java.lang.RuntimeException: found jar hell in test classpath  
> at org.elasticsearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:89)  
> at org.elasticsearch.test.ESTestCase.(ESTestCase.java:117)  
> 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: jdk.packager.services.UserJvmOptionsService  
> jar1: /Library/Java/JavaVirtualMachines/jdk1.8.0\_77.jdk/Contents/Home/lib/ant-javafx.jar  
> jar2: /Library/Java/JavaVirtualMachines/jdk1.8.0\_77.jdk/Contents/Home/lib/packager.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:87)  
> ... 4 more

> Disconnected from the target VM, address: '127.0.0.1:51245', transport: 'socket'

---

<div class="post-metadata">

**Author:** ![plutogeek](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/plutogeek/32/9292_2.png) [@plutogeek](https://discuss.elastic.co/u/plutogeek)\
**Post date:** [April 20, 2016, 5:08pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/22 "2016-04-20T17:08:26Z")

</div>

I have solved this problem by misconfigured the two jars and thank you!

---

<div class="post-metadata">

**Author:** ![plutogeek](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/plutogeek/32/9292_2.png) [@plutogeek](https://discuss.elastic.co/u/plutogeek)\
**Post date:** [April 20, 2016, 5:10pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/23 "2016-04-20T17:10:30Z")

</div>

![](https://us1.discourse-cdn.com/elastic/original/2X/f/f870fdb534670847b62dc898ccb6f47e9f2debf1.png)

---

<div class="post-metadata">

**Author:** ![vinoth\_kumar\_v](https://avatars.discourse-cdn.com/v4/letter/v/4af34b/32.png) [@vinoth\_kumar\_v](https://discuss.elastic.co/u/vinoth_kumar_v)\
**Post date:** [August 2, 2016, 5:16am UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/24 "2016-08-02T05:16:31Z")

</div>

Hi Everyone,  
I am facing the issue with jar hell while running the unit test.

```
java.lang.RuntimeException: found jar hell in test classpath
    at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:95)
    at org.elasticsearch.test.ESTestCase.<clinit>(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.<clinit>(BootstrapForTesting.java:93)
    ... 4 more

```

I have got the error like above, resolved those by removing the unnecessary jar file.

But i am facing the issue with the following two jar namely tomcat-embed-core-8.0.36.jar and hibernate-jpa-2.1-api-1.0.0.Final.jar. There is one common class between these two i need both the jar file, can anyone explain me how to resolve the issue.

```
java.lang.RuntimeException: found jar hell in test classpath
        at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:95)
        at org.elasticsearch.test.ESTestCase.<clinit>(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.<clinit>(BootstrapForTesting.java:93)
        ... 4 more

```

Thanks in advance.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [August 2, 2016, 7:40am UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/25 "2016-08-02T07:40:17Z")

</div>

Not really sure what you can do.

Some ideas:

- remove `hibernate-jpa-2.1-api-1.0.0.Final.jar` from your classpath (from your gradle deps)
- repackage one of those libs and remove all classes which are in double
- Don't use Tomcat Embedded but another container

Sorry no real concrete solutions here. For sure, it's bad that you have the same class twice within the same classloader.

And BTW you should open your own thread for your questions (and eventually link to the older thread as reference)

---

<div class="post-metadata">

**Author:** ![vinoth\_kumar\_v](https://avatars.discourse-cdn.com/v4/letter/v/4af34b/32.png) [@vinoth\_kumar\_v](https://discuss.elastic.co/u/vinoth_kumar_v)\
**Post date:** [August 2, 2016, 10:20am UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/26 "2016-08-02T10:20:49Z")

</div>

I am using hibernate JPA for SQL related bindings.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [August 2, 2016, 10:43am UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/27 "2016-08-02T10:43:05Z")

</div>

I understand that but may be you don't need this JAR if all the classes are already provided by Tomcat?

---

<div class="post-metadata">

**Author:** ![vinoth\_kumar\_v](https://avatars.discourse-cdn.com/v4/letter/v/4af34b/32.png) [@vinoth\_kumar\_v](https://discuss.elastic.co/u/vinoth_kumar_v)\
**Post date:** [August 2, 2016, 11:25am UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/28 "2016-08-02T11:25:54Z")

</div>

> [@vinoth\_kumar\_v](#):
>
> javax.persistence.PersistenceProperty

tomcat only provided the above class, but the other persistence re-queried classes were in hibernate jpa.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [August 2, 2016, 11:42am UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/29 "2016-08-02T11:42:57Z")

</div>

So you can may be replace you tomcat jar by your version where you exclude this class?  
May be look at Maven shade plugin for this?

---

<div class="post-metadata">

**Author:** ![vinoth\_kumar\_v](https://avatars.discourse-cdn.com/v4/letter/v/4af34b/32.png) [@vinoth\_kumar\_v](https://discuss.elastic.co/u/vinoth_kumar_v)\
**Post date:** [August 2, 2016, 12:01pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/30 "2016-08-02T12:01:20Z")

</div>

yes, I am trying to replace the jar with other library for the replacement.

But doesn't got exact one.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 5, 2017, 10:30pm UTC](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776/31 "2017-07-05T22:30:48Z")

</div>



[Previous page](https://discuss.elastic.co/t/elasticsearch-2-0-java-api-jarhell-problems/34776.md?page=1)
