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

Вот структура моего проекта:

введите здесь описание изображения

У меня есть два модуля Spring-Boot. В модуле аутентификации я реализую весеннюю безопасность. И у меня есть контроллер аутентификации, который позволяет нам зарегистрироваться и войти (возвращает токен jwt). В модуле управления учетной записью я хочу получить профиль пользователя, и я должен использовать модуль аутентификации. У меня должны быть разные базы данных.

Вот мой родительский помпон:

 <groupId>com.social.network</groupId>
<artifactId>social-network</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
    <module>social-network-auth</module>
    <module>social-network-account-management</module>
</modules>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

Вот pom модуля авторизации:

    <groupId>com.social.network.auth</groupId>
    <artifactId>social-network-auth</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>social-network-auth</name>
    <description>Authentication module for SocialNetwork</description>

    <parent>
        <groupId>com.social.network</groupId>
        <artifactId>social-network</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!--<relativePath>../pom.xml</relativePath>-->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <jwt.version>0.6.0</jwt.version>
        <swagger.version>2.7.0</swagger.version>
    </properties>

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

А вот и мой аккаунт-менеджер

<groupId>com.social.network.account.management</groupId>
<artifactId>social-network-account-management</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>social-network-account-management</name>
<description>Account management module for SocialNetwork</description>

<parent>
    <groupId>com.social.network</groupId>
    <artifactId>social-network</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--<relativePath>../pom.xml</relativePath>-->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.social.network.auth</groupId>
        <artifactId>social-network-auth</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>


</dependencies>

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

I want to run all my modules.

введите здесь описание изображения

Но построить не получается. Я получаю сообщение Не удалось выполнить цель org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (развертывание по умолчанию) в проекте egs-social-network: Ошибка развертывания: элемент репозитория не был указан в POM внутри элемента DistributionManagement или в параметре -DaltDeploymentRepository=id::layout::url -> [Справка 1]


person Lilit Mkrtchyan    schedule 01.09.2018    source источник
comment
mvn deploy загружает артефакты сборки в репозиторий Maven. Это то, что вы действительно хотите сделать?   -  person Simon Martinelli    schedule 01.09.2018
comment
Нет, я хочу запустить свою учетную запись и модули авторизации   -  person Lilit Mkrtchyan    schedule 01.09.2018


Ответы (2)


Прежде всего, вы должны понимать, что два разных приложения не могут работать на одном и том же порту. Итак, вы правильно подумали, но основная цель — разделить логические части на разные модули, мои поздравления, вы это уже сделали. Итак, теперь просто создайте правильную цепочку зависимостей. (ребенок -> родитель!) А также дочерний модуль не может быть приложением весенней загрузки. Это могут быть какие-то дополнительные наборы классов или библиотеки для вашего основного модуля. И, пожалуйста, прочитайте ответ Как сделать так, чтобы один модуль зависел от артефакта другого модуля?. Вы можете иметь несколько контроллеров в одном приложении, но с разными сопоставлениями, вам не нужно для этих целей два разных приложения. Кстати, для начала запустите mvn package и установите =)

person Egor Kravchenko    schedule 03.09.2018
comment
решение состоит в том, чтобы создать модуль api-gateaway и использовать эврику Netflix. - person Lilit Mkrtchyan; 20.09.2018
comment
это уже другая история, для этих целей использовать api-gateway и использовать eureka очень странно. - person Egor Kravchenko; 25.09.2018

Вы должны позвонить

mvn spring-boot:run 

в каждом модуле для запуска приложений.

Вы найдете цель в разделе «Плагины».

Но поскольку вы используете IntelliJ, есть панель запуска Spring Boot Run, где вы можете запускать все приложения.

person Simon Martinelli    schedule 01.09.2018
comment
Я хочу запустить их в одном порту. - person Lilit Mkrtchyan; 01.09.2018
comment
У меня есть контроллеры в обоих модулях, и они должны быть доступны с клиента. Например. localhost:8080/api/v1/auth/signup, localhost:8080/api/v1/auth/signin из модуля аутентификации и localhost:8080/api/v1/account из модуля управления учетной записью (этот должен предоставлять токен, возвращаемый из конечной точки входа) - person Lilit Mkrtchyan; 01.09.2018
comment
Ваш подход неверен. Вы должны создать приложение для весенней загрузки, а затем добавить другие модули в качестве зависимостей. Но эти модули не являются весенними загрузочными приложениями. - person Simon Martinelli; 02.09.2018