проблема управления многомодульными зависимостями при весенней загрузке - PullRequest
0 голосов
/ 13 марта 2020

У меня проблема с развертыванием мультимодульного фляги с пружинной загрузкой

У меня есть 3 компонента, как показано ниже.

Parent
   --Child1
   --Child2

У Child2 есть зависимость child1

Но когда я Взять банку child1, классов нет в банке. Я получаю java.lang.classnotfoundexception

ниже моего

A pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
</parent>

<groupId>com.A</groupId>
    <artifactId>A</artifactId>
    <version>0.0.1</version>
    <packaging>pom</packaging>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <type>pom</type>
                <version>${spring.boot.version}</version>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>com.A</groupId>
                <artifactId>A</artifactId>
                <version>0.0.1</version>
            </dependency>
            <dependency>
                <groupId>com.B</groupId>
                <artifactId>B</artifactId>
                <version>0.0.1</version>
            </dependency>
            </dependencies>
        </dependencyManagement>
            <build>
    <finalName>service</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

    </build>

B pom.xml

<groupId>com.B</groupId>
    <artifactId>B</artifactId>
    <version>0.0.1</version>
    <name>Omni Channel Core</name>
    <description>Omni Channel Core Functions</description>
    <parent>
        <groupId>A</groupId>
        <artifactId>A</artifactId>
        <version>0.0.1</version>
    </parent>
    <packaging>jar</packaging>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

C pom.xml

<groupId>com.C</groupId>
    <artifactId>C</artifactId>
    <version>0.0.1</version>
    <parent>
        <groupId>A</groupId>
        <artifactId>A</artifactId>
        <version>0.0.1</version>
    </parent>
    <packaging>jar</packaging>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
                <groupId>com.B</groupId>
                <artifactId>B</artifactId>
        </dependency>
    </dependencies>

    <build>
    <finalName>service</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

    </build>

Всякий раз, когда я беру банку C внутри этой зависимой банки B, не существует.

Как решить В этом вопросе любая помощь будет принята с благодарностью !!!

1 Ответ

3 голосов
/ 14 марта 2020

Конфигурация мультимодульного проекта весенней загрузки maven проста. отметьте этот образец , который я создал на основе вашего вопроса.

У меня есть следующие три модуля:

multi-modules
   --module-B
   --module-C

Итак, мои мультимодули в основном эквивалент вашего модуля A

Конфигурация родительского pom

Моя Конфигурация родительского pom очень похожа на вашу, за исключением того, что я также настраиваю раздел, в котором я объявляю список всех дочерних модулей этого родителя. Возможно, мы не сможем сделать это всегда, но в данном конкретном случае это возможно, поскольку я создаю родительский и дочерний модули в одном проекте . Одним небольшим преимуществом этого является тот факт, что я могу последовательно собрать все дочерние модули из родительского элемента, выполнив (на уровне родителя) такую ​​команду, как mvn clean install

<modules>
   <module>module-B</module>
   <module>module-C</module>
</modules>

Конфигурация дочерних модулей

Чтобы упростить задачу, мы можем сделать так, чтобы логическая структура многомодульного проекта соответствовала его физической структуре, то есть иметь pom-каталог родителя, который содержит два подкаталога одного уровня, по одному для каждого модуля.

matching physical structure of multi-module project

Таким образом, нам не нужно go проходить через некрасивую конфигурацию относительного пути.

module-B

Ничего особенного в его конфигурация . Я добавил фиктивный ServiceB класс, чтобы иметь в нем некоторое минималистичное c содержимое.

module- C

Его конфигурация аналогична конфигурации модуля B, за исключением того, что она зависит от модуля B и, конечно, я использую конфигурацию управления зависимостями, выполненную в parent для определения зависимости от модуля B, используя только groupId и artifactId .

Сборка и проверка

На этом этапе мы можем запустить mvn clean install на уровне родителя и go проверить, что зависимость от модуля B переходит в модуль- C

enter image description here

Мы можем видеть что в списке библиотек модулей - C здесь:

enter image description here

Надеюсь, это поможет.

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