пример многомодульного maven с загрузкой Spring

#spring #maven #spring-boot

#spring #maven #весенняя загрузка

Вопрос:

Я хочу знать, как я могу создать многомодульный проект с maven, используя Spring Boot.

Может ли кто-нибудь показать мне пример «родительского пома» и «дочернего пома»?

Спасибо

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

1. cdheck это maven.apache.org/plugins/maven-eclipse-plugin/reactor.html это дает представление о многомодульном проекте maven

2. Maven управляет структурой вашего приложения как проектами Java (обычной практикой может быть разделение вашего приложения на несколько уровней, например, с использованием jar / war / ear), в то время как Spring (или spring boot в вашем случае) — это просто платформа для реализации логики вашего приложения. Использование Spring Boot не должно влиять на то, как вы будете делить свой проект на модули. Я рекомендую вам сначала спроектировать архитектуру вашего приложения (слои, управление ошибками, …), затем решить, как разделить ваше приложение на проекты Java (заменяемый слой или нет, …) и, наконец, выбрать способ реализации каждого модуля

Ответ №1:

Этот вопрос слишком прост для ответа или слишком сложен для понимания, иначе я не могу объяснить, почему нет ответов.

Я бы выбрал решение, которое использует структуру папок, подобную следующей

 project folder
|---pom.xml
|---module1
    |---pom.xml
    |---src
|---module2
    |---pom.xml
    |---src
|---module3
    |---pom.xml
    |---src
  

Я бы определил pom.xml проекта с помощью упаковки pom, например:

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

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

    <groupId>com.myproject</groupId>
    <artifactId>project</artifactId>
    <packaging>pom</packaging>
    <version>0.0.1-SNAPSHOT</version>

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

    <name>MySupercoolProject</name>
    <description>What else?</description>

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

    <dependencies>
      <!-- Put here dependencies shared by your project -->
    </dependencies>
</project>
  

Как вы видите, родительским элементом вашего проекта будет spring-boot-starter-parent .

Тогда pom.xml одного из ваших модулей будет, например:

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.myproject</groupId>
        <artifactId>project</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.myproject</groupId>
    <artifactId>module1</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>

    <name>Application</name>
    <description>SudenGut application</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <start-class>com.myproject.MyApplication</start-class>
        <java.version>1.8</java.version>
        <tomcat.version>8.0.24</tomcat.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--- this will not be enough to provide a cool app :) -->
    </dependencies>

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

где основное приложение находится MyApplication.java в пакете com.myproject module1 .

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

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

1. Возможно ли иметь такую конфигурацию с 2 веб-приложениями? Например, если модуль 1 — это веб-приложение, используемое для служб rest, а модуль 2 — это другое веб-приложение, используемое в качестве портала администратора. Они оба имеют зависимость от общего модуля 3. Я знаю, что их можно было бы запускать как 2 отдельных приложения на 2 отдельных экземплярах tomcat, но возможно ли запустить их на одном экземпляре?

2. @mad_fox Уверен, что ты сможешь. У вас может быть общий родительский элемент с упаковкой pom, общие модули jar (например, модель, которая встраивает часть, связанную с db), а затем два модуля с двумя приложениями spring, но на разных портах (если вы планируете запускать их на одном веб-сервере). Обычно я делаю что-то подобное. В конце вы развертываете приложение, которое было скомпилировано со всеми зависимостями, а не весь ваш проект IDE.

3. Сэр, спасибо вам ооочень большое! Ты спас мое время и жизнь))))

Ответ №2:

Модули как проект весенней загрузки

Весенняя загрузка обычно работает с родительским. Но если вы создаете многомодульный проект и хотите использовать spring boot на каком-либо из ваших модулей, возникает важный вопрос, какой из них будет родительским? Конечно, ваш основной проект должен быть родительским. Итак, вы должны использовать spring boot в качестве зависимости в вашем модуле.

 <dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.9.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  

Для получения подробной информации, пожалуйста, ознакомьтесь со следующей документацией;

https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-build-systems.html#using-boot-maven-without-a-parent

Ответ №3:

@juanhl это так просто. Вы можете создать многомодульный проект maven с загрузкой Spring.

Шаги: 1) Создайте проект Maven.Родительский проект pom.xml выглядит следующим образом,

     <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.springmultumoduleweb</groupId>
      <artifactId>multimodule-web-app</artifactId>
      <packaging>pom</packaging>

      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
      </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>
      <modules>
        <module>multimodule-api</module>
        <module>multimodule-service</module>
        <module>EarModule</module>
      </modules>
      <version>0.0.1-SNAPSHOT</version>
    </project>
  

2) добавьте модуль maven к родительским модулям
дочерние модули могут иметь одну или несколько зависимостей от других модулей, а типом упаковки может быть jar или war.

3) создайте еще один модуль для генерации файла ear.(тип упаковки: ear ), который содержит зависимости всех модулей, как показано ниже,

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.springbootparent.demo</groupId>
    <artifactId>com.springbootparent.demo</artifactId>
    <version>0.0.1-SNAPSHOT</version
  </parent>
  <artifactId>com.springboot.ear</artifactId>
  <packaging>ear</packaging>
  <dependencies>
    <dependency>
        <groupId>com.springbootparent.demo</groupId>
        <artifactId>com.springboot.service1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.springbootparent.demo</groupId>
        <artifactId>com.springboot.service2</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.springbootparent.demo</groupId>
        <artifactId>com.springboot.war1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>com.springbootparent.demo</groupId>
        <artifactId>com.springboot.war2</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
    </dependency>
  </dependencies>
</project> 
  

4) очистите и установите родительский проект maven.

5) разверните созданный файл ear / war на сервере. (для файла ear вы должны развернуть на сервере корпоративных приложений)

-Удачи