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

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

    <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

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


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


Ответы (2)


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

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

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

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

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

person Anshul Singhal    schedule 03.05.2019

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

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

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

person J Fabian Meier    schedule 02.05.2019