Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Maven: дочерний модуль не может наследовать зависимости родительского модуля

Автор вопроса: bytefishОтветов: 2

это мой родитель пом

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.github.fish56</groupId>
    <artifactId>MavenModules</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>dao</module>
    </modules>
    <packaging>pom</packaging>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.6</version>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

это pom моего дочернего модуля

    <parent>
        <artifactId>MavenModules</artifactId>
        <groupId>com.github.fish56</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dao</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

Я бы хотел, чтобы дочерний модуль мог наследовать родительские зависимости, но это не удалось.

Я не могу использовать lombok или junit в своем дочернем помпе.

А это мое файловое дерево

.
├── dao
│   ├── pom.xml
│   ├── src
│   └── target
├── pom.xml

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

  • Проект lombok еще не родился, что означает, что ваше использование проекта lombok просто не работает таким образом. Так что просто удалите <scope>import</scope> из своего родителя. khmarbaise 02.05.2019

mavenmaven-3dependency-management

Ответы

Ответ 1 · рейтинг 4 · Anshul Singhal

В родительском POM основное различие между <dependencies> и <dependencyManagement> заключается в следующем:

Артефакты, указанные в разделе <dependencies>, будут ВСЕГДА включаться в качестве зависимостей дочерних модулей.

Артефакты, указанные в разделе <dependencyManagement>, будут включаться в дочерний модуль только в том случае, если они также были указаны в разделе <dependencies> самого дочернего модуля.

Пожалуйста, найдите больше по следующей ссылке:

Различия между dependencyManagement и зависимостями в Maven

Ответ 2 · рейтинг 1 · J Fabian Meier

Вы импортируете ломбокскую спецификацию

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.6</version>
            <scope>import</scope>
        </dependency>

а затем вы пытаетесь использовать его как зависимость. Но спецификация - это просто список записей dependencyManagement. Это не может быть зависимостью дочернего проекта.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы