Область импорта Maven не импортирует тестовые зависимости - PullRequest
0 голосов
/ 19 октября 2018

Я бы хотел определить большое количество зависимостей compile и test в POM для импорта в другие POM.Все работает, как и ожидалось для compile зависимостей.Но зависимости test не разрешены в POM моего проекта.

Ее минималистский пример:

POM для импорта:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example.maven.import</groupId>
    <artifactId>pom-to-be-imported</artifactId>
    <packaging>pom</packaging>
    <version>1</version>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.8</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>5.3.1</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
        </dependency>
    </dependencies>

</project>

POM с использованием импорта:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example.maven.import</groupId>
    <artifactId>pom-using-import</artifactId>
    <packaging>pom</packaging>
    <version>1</version>

    <dependencies>
        <dependency>
            <groupId>com.example.maven.import</groupId>
            <artifactId>pom-to-be-imported</artifactId>
            <version>1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>

</project>

Когда я запускаю dependency:tree, он показывает только compile зависимости commons-lang3, но не JUnit test зависимость:

>mvn dependency:tree
. . .
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ pom-using-import ---
[INFO] com.example.maven.import:pom-using-import:pom:1
[INFO] \- com.example.maven.import:pom-to-be-imported:pom:1:import
[INFO]    \- org.apache.commons:commons-lang3:jar:3.8:runtime
[INFO] ------------------------------------------------------------------------

Как мне получить импортируемые зависимости test? В документации maven я не нашел ничего, указывающего, что импорт работает только для зависимостей compile.

1 Ответ

0 голосов
/ 20 октября 2018

Область действия import предназначена только для использования внутри раздела dependencyManagement.(Эта концепция также называется спецификацией в maven.) Из документации maven :

  • import

Эта область поддерживается только взависимость типа pom в разделе .

У вас есть несколько вариантов для достижения желаемого:

  1. Правильно используйте механизм импорта:добавление зависимости import scoped в секцию dependencyManagement в pom-using-import.Затем вы можете удалить раздел <dependencies> в «pom-to-be-import».Каждый «импортирующий pom» должен явно перечислить все зависимости в разделе <dependencies>, но вам не нужно указывать версию (или область действия).
<dependencyManagement>
    <dependency>
        <groupId>com.example.maven.import</groupId>
        <artifactId>pom-to-be-imported</artifactId>
        <version>1</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
<dependencyManagement>
Если все ваши «импортирующие poms» нуждаются в одинаковых зависимостях, вы можете использовать наследование, объявив «pom-to-be-import» как родительский вместо использования import:
<project ...>
  <modelVersion>4.0.0</modelVersion>
    <parent>
      <groupId>com.example.maven.import</groupId>
      <artifactId>pom-to-be-imported</artifactId> <!-- Rename it to e.g. 'parent' -->
      <version>1</version>
      <relativePath>../pom-to-be-imported/pom.xml</relativePath>
    </parent>
    <artifactId>pom-using-import</artifactId>

Альтернатива 2, вероятно, ближе всего к тому, что вы хотите.

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