Как создать конкретный модуль в многомодульном проекте maven с пружинной загрузкой

avatar
SniperJack
8 апреля 2018 в 06:42
1959
2
2

Я создал многомодульный проект весенней загрузки maven.

Но когда я использую

mvn clean package -pl module2 spring-boot:run

в консоли. Он говорит мне, что какой-то класс в модуле1 не может быть найден.

Но я добавил зависимость в module2. Module2 — это окончательный проект.

структура проекта выглядит следующим образом.

pom.xml родительского проекта

<groupId>com.example</groupId>
<artifactId>multi-module</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
    <module>module1</module>
    <module>module2</module>

</modules>

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

<properties>
    ...
</properties>

</dependencies>
    ...
<dependencyManagement>
    ...
</dependencyManagement>

память в модуле1:

<groupId>com.example</groupId>
<artifactId>module1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<parent>
    <groupId>com.example</groupId>
    <artifactId>multi-module</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

файл pom.xml в модуле 2:

<artifactId>personalinfo</artifactId>
<name>personalinfo</name>
<url>http://maven.apache.org</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<parent>
    <groupId>com.example</groupId>
    <artifactId>multi-module</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>module1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
Источник
SilverNak
8 апреля 2018 в 07:35
0

Можете показать ошибку, пожалуйста?

khmarbaise
8 апреля 2018 в 17:03
0

Вы сначала сделали mvn install от root?

SniperJack
10 апреля 2018 в 00:02
0

Когда я использую mvn clean package в корневом каталоге. Это работает хорошо. Но я хочу знать, как использовать «mvn clean package -pl [targetModule] spring-boot: run» для запуска модуля весенней загрузки.

SniperJack
10 апреля 2018 в 00:03
0

Ошибка следующая: [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /src/main/java/com/example/dao/ClassInModule1.java:[12,29] package com.package.in.module1 does not exists

Ответы (2)

avatar
bitscanbyte
8 апреля 2018 в 17:38
1

Вам нужно настроить pom.

Родительский пом.:

   <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

Модуль pom (содержащий ваш Main)

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>Your mainClass</mainClass>
                <fork>true</fork>
                <skip>false</skip>
            </configuration>
        </plugin>
    </plugins>
</build>

Обратите внимание на Configuration > skip

SniperJack
9 апреля 2018 в 23:59
0

Ну, что ж, спасибо. Я пробовал, но эффекта не было.

bgraves
18 апреля 2019 в 17:05
0

@bitscanbyte прав, так и должно работать — взгляните на простой демонстрационный проект, который я создал: github.com/drahkrub/spring-boot-multi-module

SniperJack
30 мая 2019 в 03:36
0

да ты прав. Важность ```` <fork>true</fork>````

avatar
bgraves
18 апреля 2019 в 17:15
0

Ответ @bitscanbyte правильный, но конфигурацию можно упростить:

Родительский пом

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
</build>

Модуль pom (модуль, в котором находится @SpringBootApplication)

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <skip>false</skip>
            </configuration>
        </plugin>
    </plugins>
</build>

Простой демонстрационный проект можно найти здесь: https://github.com/drahkrub/spring-boot-multi-module