Использовать проект maven с pom-упаковкой в качестве зависимости

#java #maven #pom.xml #maven-dependency

#java #maven #pom.xml #maven-зависимость

Вопрос:

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

Проект pom-packaging состоит из нескольких подмодулей, которые являются jar-упаковкой, аналогичной:

 <project ...>
    <groupId>the.pom.project</groupId>
    <artifactId>pom-project</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <modules>
            <module>a-pom-module</module>
            <module>b-pom-module</module>
            <module>c-pom-module</module>
            <module>d-pom-module</module>
            <module>e-pom-module</module>
            <module>f-pom-module</module>
    </modules>
</project>
 

А другой проект зависит от подмодульных jar pom-project. Я пишу, как:

 <project ...>
    <groupId>the.another.project</groupId>
    <artifactId>another-project</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <dependencyManagement>
            <dependencies>
                    <dependency>
                            <groupId>the.pom.project</groupId>
                            <artifactId>pom-project</artifactId>
                            <version>1.0</version>
                            <type>pom</type>
                    </dependency>
            </dependencies>
    </dependencyManagement>
</project>
 

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

Я не надеюсь добавить все подмодули в качестве зависимостей вручную.

Ответ №1:

Ваш способ импорта pom не работает.

Вам нужно создать новый pom, который объединяет нужные вам зависимости, а затем добавить зависимость от этого агрегированного pom в ваш проект

Создайте агрегированный pom следующим образом

 <groupId>the.pom.project</groupId>
    <artifactId>aggregate-pom</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <dependencies>
        <dependency>
            <groupId>the.pom.project</groupId>
            <artifactId>a-pom-module</artifactId>
            <version>1.0</version>
        </dependency>
        .
        .
        .
    <dependencies>
 

Затем используйте следующую зависимость в вашем проекте

 <dependency>
    <groupId>the.pom.project</groupId>
    <artifactId>aggregate-pom</artifactId>
    <version>1.0</version>
    <type>pom</type>
</dependency>
 

Комментарии:

1. Спасибо, это работает. Хотя я думаю, что должен быть какой-то плагин для автоматической генерации такого агрегированного pom при развертывании.

2. Да, должен был быть флаг для генерации агрегированного pom