4

I am trying to run as Java Application in a maven project with Eclipse and I am getting the following run time error.The error is shown below.

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/ConnectionReuseStrategy at com.wang.testMaven.App.main(App.java:16) Caused by: java.lang.ClassNotFoundException: org.apache.http.ConnectionReuseStrategy at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

and my code is shown below

public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        HttpClient httpClient = HttpClientBuilder.create().build();
        System.out.println( "Hello World!" );

    }
}

My pom.xml is shown below

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.wang</groupId>
  <artifactId>testMaven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>testMaven</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
  <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.1-alpha1</version>
</dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient-cache</artifactId>
            <version>4.5.2</version>
        </dependency>
  </dependencies>
</project>

any idea..thanks

osanger
  • 2,276
  • 3
  • 28
  • 35
Toni.W
  • 113
  • 1
  • 2
  • 12

1 Answers1

7

I realised that there are couple of dependencies with the same groupId and artifactId.

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.1-alpha1</version>
</dependency>

And

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.1</version>
</dependency>

Actually you should have only one dependency with the same groupId and artifactId.

So firstly I removed httpcore:4.1-alpha1 dependency and executed the test class. I got the exception as

java.lang.NoClassDefFoundError: org/apache/http/config/Lookup
    at com.test.so.Test1.test(Test1.java:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Then I used httpcore:4.1-alpha1 instead of httpcore-4.1, I got the same exception.

And hence when I updated the httpcore version to 4.3.3 based on SO link, I got the exception as -

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/ssl/SSLContexts
    at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:966)
    at com.amitg.so.App.main(App.java:11)

Finally updating the httpcore version to 4.4, it worked perfectly fine. So it should work for all httpcore version jars above 4.4. (I tested for 4.4.4 and it also worked fine.). Version available are mentioned here. Please find the working code over here.

Community
  • 1
  • 1
asg
  • 2,248
  • 3
  • 18
  • 26
  • @asgThank you for your answer! But it doesn't work When I use your working code.Maybe I think it's the reason of my Eclipse. – Toni.W Apr 21 '16 at 02:35
  • I am using STS 3.7.0.20 and it's working fine with STS. – asg Apr 21 '16 at 03:19
  • @asgI know the reason.I had copied .jar files into my JDK folders! After I delete them it works.! – Toni.W Apr 21 '16 at 08:55
  • Good to know. Thanks! – asg Apr 21 '16 at 09:18
  • 1
    Thanks @asg for your answer! I changed(upgraded) my org.apache.httpcomponents httpcore version to 4.4.13 based on the Spring dependency doc and it worked for me. Reference here: https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-dependency-versions.html – Leo Jun 01 '20 at 23:05