Проблема зависимостей Apache HTTPClient: POM - PullRequest
0 голосов
/ 11 февраля 2019


У меня проблема при использовании Apache HttpClient в моем java-приложении.

2019-02-11 07:09:18,270 ERROR [Call-Dequeue-Delegator] (HibernateUtil.java:275) - Building SessionFactory failed.
java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpRequestBase
    at java.lang.Class.getDeclaredMethods0(Native Method)

Он отлично работает на моей локальной машине, но не на серверах.Поскольку это клиентское приложение, у меня нет сведений о сервере и т. Д.

Ниже приведен мой код:

RequestConfig config = RequestConfig.custom()
                .setConnectTimeout(20)
                .setConnectionRequestTimeout(30).build();

        // Creating client with request configuration(timeouts) & disabling redirect following
        CloseableHttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(config).disableRedirectHandling().build();

        String endpoint = this.getSOAPEndPoint();
        String queryParamWithSurveyData = addDataToQueryParam(endpoint, customRequestModel);
        endpoint += queryParamWithSurveyData;
        HttpRequestBase httpRequestWithoutBody = null; // Failing at this

В приведенном выше коде он не работает в последней строке, и яУдивлен, почему нет первого, поскольку оба (RequestConfig и HttpRequestBase) импортируются из HTTPClient.jar

Ниже приводится мой фрагмент POM

//Existing sample dependency
    <dependency> //Existing sample dependency
        <groupId>com.connectfirst.intelliqueue</groupId>
        <artifactId>gson</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/couchbase/gson-2.3.jar</systemPath>
        <version>1</version>
    </dependency>

// New dependencies added
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/httpcore-4.4.11.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/httpclient-4.5.7.jar</systemPath>
        <version>1</version>
    </dependency>

Я где-то видел, что HttpClient зависит от некоторых других JAR-файлова также и поэтому добавил следующие зависимости, но не повезло.

<dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/httpcore-4.4.11.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/httpclient-4.5.7.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/commons-codec-1.11.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/commons-logging-1.2.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>fluent-hc</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/fluent-hc-4.5.7.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient-cache</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/httpclient-cache-4.5.7.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient-osgi</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/httpclient-osgi-4.5.7.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient-win</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/httpclient-win-4.5.7.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/httpmime-4.5.7.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/jna-4.5.2.jar</systemPath>
        <version>1</version>
    </dependency>

    <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna-platform</artifactId>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/jna-platform-4.5.2.jar</systemPath>
        <version>1</version>
    </dependency>

JAR успешно создается на моем локальном компьютере с чистой установкой maven.Любое руководство будет полезно.Благодаря.

1 Ответ

0 голосов
/ 11 февраля 2019

Почему вы выбираете system?Это означало бы, что файлы jar находятся на пути к классу запущенного приложения.Если вы включите его для компиляции, предполагая, что вы упаковываете его в JAR или WAR-файл с пружинной загрузкой, они будут включены в полученный артефакт.Без этого приложение не сможет найти зависимости, с которыми вы работаете.

Атрибут scope указывает, где должны быть размещены зависимости на пути к классам.

  • компилируется - артефакт доступен дляссылка на код проекта и должна быть связана (якобы) с результирующим артефактом (например, встроенным в WAR под WEB-INF / lib или подпружиненной загрузкой как BOOT-INF / lib)
  • при условии - артефакт доступендля ссылки в исходном коде проекта, но не включен в результирующий артефакт (например, библиотеки JSP в веб-приложении, вы хотите отложить до реализации контейнера).
  • время выполнения - классы зависимостей недоступны для прямогоссылка на исходный код проекта, но на него ссылаются во время выполнения (подумайте, драйвер JDBC, вы специально не используете его загрузку, традиционно, путем отражения с использованием имени).
  • test - классы зависимостей доступны дляисходники в src / test / java (и т. д.).Предполагается, что IDE разделяют ссылки, но не всегда (например, Eclipse).Если вы попытаетесь сослаться на зависимость test scoped из src / main / java, ваш код не скомпилируется, поскольку зависимость недоступна.
  • system - В этом случае артефакт явно расположен по пути и ожидаетсябыть доступным во время выполнения в пути к классу приложения-потребителя.
  • import - поддерживается только в элементах dependencyManagement.

Описание можно увидеть в официальной документации 1023 *.

...