Обеспечить зависимости в реализующем приложении / модуле - PullRequest
0 голосов
/ 17 марта 2020

Я пишу библиотеку, которую я хотел бы скомпилировать в реализуемый jar, который затем будет использоваться в других проектах / тестах.

В моей библиотеке я использую различные jar-файлы: okHttp, guava и др. c. Я хочу сказать maven, чтобы они не помещали эти зависимости в окончательный JAR, а создавали проекты / модули, которые зависит от этой библиотеки обеспечить эти зависимости

Как это можно сделать в Maven?

библиотека pom. xml

    <groupId>com.example</groupId>
    <artifactId>testing-library</artifactId>
    <packaging>jar</packaging>
    <version>1.0.0-SNAPSHOT</version>
      <dependencies>
        <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>28.2-jre</version>
        <scope>compile</scope>
      </dependency>
      <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>4.3.1</version>
        <scope>compile</scope>
      </dependency>
    </dependencies>

модуль реализации pom. xml

    <groupId>com.example</groupId>
    <artifactId>implementation-</artifactId>
    <version>1.0.0-SNAPSHOT</version>

      <dependencies>
        <dependency>
        <groupId>com.example</groupId>
        <artifactId>testing-library</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <scope>test</scope>
      </dependency>
    </dependencies>

Но я получаю java.lang.NoClassDefFoundError: com/google/common/base/Preconditions ошибка

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Хорошо, я решил проблему. Похоже, что сгенерированный POM. xml для testing-library не содержал никаких зависимостей.

Я использовал mvn install:install-file ... -DgeneratePom=true для установки jar в локальный репозиторий для быстрой отладки, и pom, сгенерированный таким образом, похоже, не имел библиотечных зависимостей '

0 голосов
/ 17 марта 2020

Если вы введете код в src/test/java, этот код будет , а не частью финальной банки. Код предназначен для тестов во время сборки jar.

Если ваша библиотека является вспомогательной библиотекой для тестов, поместите код в src/main/java и укажите его в других проектах с <scope>test</scope>.

Кстати, не используйте плагин Maven Shade или плагин сборки Maven для библиотеки. Они в основном предназначены для автономных банок, которые работают самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...