English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Многоуровневые проекты SpringBoot

Multi-Module проект

Проект Spring Boot, содержащий вложенные проекты Maven, называется многослойный проект. В многослойных проектах родительский проект выполняет функцию контейнера для базовой конфигурации Maven.

иначе говоря многослойный проектсостоит из родительского POM, который управляет группой подмодулей. Или многослойный проектссылку на один или несколько подмодулей, определяемых из родительского POM.

Родительский проект Maven должен содержать pom тип упаковки делает проект агрегатором. Родительский проект pom.xml файл содержит все зависимости, наследуемые подпроектами модули, общие зависимостии свойствасписок. Родительский pom находится в корневой директории проекта. Подмодули являются реальными проектами Spring Boot, они наследуют мaven свойства от родительского проекта.

Когда мы запускаем многоступенчатый проект, все модули развертываются вместе на嵌入式 сервере Tomcat. Мы также можем развертывать отдельные модули.

Родительский POM

Родительский POM определяет группу ID, ID артефакта, версию, и packaging.. В предыдущих проектах Maven мы видели, что родительский POM определяет упаковку jar.. Но в многоступенчатых проектах, родительский POM Определение упаковки pom. Упаковка pom ссылается на другие Maven проекты.

Почему нам нужны многоступенчатые проекты

Разделение проекта на несколько модулей полезно и легко поддерживать. Мы также можем легко редактировать или удалять модули в проекте, не влияя на другие модули. Это полезно, когда необходимо развертывать модули по отдельности.

Достаточно указать все зависимости в родительском pom. Все другие модули делят один и тот же pom, поэтому мы не должны указывать одни и те же зависимости в каждом модуле.

Подмодули-ear, war и jar

Подмодули могут быть любыми проектами и могут иметь любую упаковку. Мы можем свободно создавать любые типы зависимостей между модулями и束ами.

например, мы создаем EAR (enterprise archive), WAR (Web ARchive) и JAR (Java ARchive) файл. Файл JAR включается в WAR файл, а WAR файл включается в EAR файл. Файл EAR является конечным пакетом программного обеспечения, который можно развернуть на сервере приложений.

Файл EAR содержит один или несколько файлов WAR. Каждый файл WAR содержит проект сервисов, который имеет общий код для всех файлов WAR и типов упаковки в JAR.

Maven подпроект/модуль

Подмодули являются независимыми Maven проектами, которые делят свойства родительского проекта. Все подпроекты могут быть скомпилированы одной командой, так как они находятся в родительском проекте. легче определить отношения между проектами.

Структура директории многоступенчатого проекта

Давайте разберемся в структуре директории многоступенчатого проекта.

На следующем рисунке мы создали проект под названием spring-boot-multi-module-project проекта, который содержит в себе родительский pom После этого мы создали два Maven модульи названы соответственно module1 и module2 Эти два модуля содержат свои собственные pom файлы.

Давайте откроем родительский POM и посмотрим на его конфигурацию при создании Maven модуля в проекте.

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 https://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>2.2.2.BUILD-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.w3codebox</groupId>
<artifactId>spring-boot-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-multi-module-project</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> 
<dependency>
 <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<modules>
<module>module1</module>
<module>module2</module>
</modules>
</project>

upper pom файл аналогичен предыдущему примеру. Но в данном случае pom в файле, нужно учитывать два момента: упаковкаи модуль.

Когда мы создаем проект с несколькими модулями, нам нужно configuring packaging pom в родительском pom файле, а не jar.

<packaging>pom</packaging>

Когда мы создаем модуль Maven в проекте, Spring Boot автоматически модуль в родительском pom автоматически конфигурируются модули, как показано ниже.

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

Теперь мы посмотрим на содержание файла pom для module1.

pom.xml

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.w3codebox</groupId>
<artifactId>spring-boot-multi-module-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.w3codebox</groupId>
<artifactId>module1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>module1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

Здесь необходимо отметить, что aforementioned POM файл не включает такие элементы, как starter-web, web-mvc и т.д.И таких общих зависимостей. Parent POM.

Пример многослойного проекта Spring Boot

Давайте создадим пример многослойного приложения.

В следующем примере мы создали приложение с именем Maven проект spring-boot-multimodule.Это основное приложение. В основном приложении мы создалипятьМодули, как показано ниже: Приложение Модель Хранилище service-api service-impl

Модуль приложения

Модуль приложения является основным модулем проекта. Он включает класс приложения, в котором определен метод main, необходимый для запуска Spring Boot Application. Он также включает Конфигурационные свойства приложения, контроллеры, представленияи Ресурсы.

Модуль приложения включает модуль модели, модуль реализации услуги в качестве зависимого модуля, содержащего модель, модуль хранилища и модуль API услуги.

Модуль модели

Модуль модели включает Энтитии используемые в проекте Визуальные объекты .

Модуль хранилища

Модуль хранилища включает <В项目中 используемые>  Хранилище. Это зависит от модуля модели.

Модуль API услуги

Модуль API услуги включает все проекты Сервис.Это также зависит от модуля модели.

Модуль реализации услуги

Модуль реализации услуги может реализовывать сервис. Это зависит от модуля хранилища и модуля API услуги.

Агрегатор POM (родительский POM)

Parent POM включает все модули приложения. Он также включает все общие зависимости и свойства, необходимые для одного или нескольких модулей. Поскольку проект определил Spring IO Platform в качестве родительского, зависимые элементы определяются без версии, так как они определяются родительским POM.

Давайте изучим структуру многослойного приложения, которое мы создали.

Spring-boot-multimodule  
│── pom.xml  
│   └── REDME.adoc  
├── application  
│   ├── pom.xml  
│   └── src  
│       └── main  
│           ├── java  
│           │   └── sample  
│           │       └── multimodule  
│           │           ├── SampleWebJspApplication.java  
│           │           └── web  
│           │               └── WelcomeController.java  
│           └── resources  
│               ├── application.properties  
│               └── templates  
│                   └── welcome  
│                       └── show.html  
├── model  
│   ├── pom.xml  
│   └── src  
│       └── main  
│         └── java  
│             └── sample  
│               └── multimodule  
│                       └── domain  
│                           └── entity  
│                               └── Account.java  
|  
├── repository  
│   ├── pom.xml  
│   └── src  
│       └── main  
│         └── java  
│             └── sample  
│               └── multimodule  
│                       └── repository  
│                           └── AccountRepository.java  
├── service-api  
│   ├── pom.xml  
│   └── src  
│       └── main  
│         └── java  
│             └── sample  
│               └── multimodule  
│                   └── service  
│                           └── api  
│                               └── AccountNotFoundException.java  
│                               └── AccountService.java  
└── service-impl  
    │── pom.xml  
    └── src  
        └── main  
            └── java  
                └── sample  
                    └── multimodule  
                        └── service  
                            └── impl  
                                └── AccountServiceImpl.java

Шаг 1: Создайте файл с именем spring-boot-multimodule Maven проект.

Шаг 2: Откройте pom.xml (родительский pom) файл, и тип пакета jar изменить на pom。  

pom.xml(родительский pom)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>
<!-- Springio платформа является родительской приложением для создаваемого приложения, которая может использовать Spring Boot и все его стандартные конфигурации -->
<parent>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Parent - Pom Aggregator</name>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- Spring Boot зависимости -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
 

В указанном файле pom.xml应注意的一件事是,由于尚未创建Maven模块,因此未配置。Теперь мы создадим Maven модуль, как указано.

Шаг 3: Создайте файл с именем   приложение Maven модуль .

Шаг 4: Откройте модуль приложения   pom.xml Файл, и убедитесь, что тип打包а   jar.

pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>sample.multimodule</groupId>
        <artifactId>sample.multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sample.multimodule.application</artifactId>
    <packaging>jar</packaging>
    <name>Project Module - Application</name>
    <dependencies>
      <!-- Project modules -->
      <dependency>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule.service.impl</artifactId>
        <version>${project.version}</version>
      </dependency>
      <!-- Spring Boot dependencies -->
          <dependency>
              <groupId>org.apache.tomcat.embed</groupId>
              <artifactId>tomcat-embed-jasper</artifactId>
              <scope>provided</scope>
          </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
    
    </dependencies>
    
    <build>
        <plugins>
            <!-- Spring Boot plugins -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
 

步骤5: создание  主要类。这是要运行的类。

SampleWebJspApplication.java

package sample.multimodule;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.orm.jpa.EntityScan;
@SpringBootApplication
public class SampleWebJspApplication 
{
    public static void main(String[] args) throws Exception 
    {
        SpringApplication.run(SampleWebJspApplication.class, args);
    }
}
 

步骤6: в пакете   smaple.multimodule.web。

в создании объекта с именем   WelocameController 的Controller类。  
  WelcomeController.java

package sample.multimodule.web;
import java.util.Date;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
импортировать org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import sample.multimodule.domain.entity.Account;
import sample.multimodule.service.api.AccountService;
@Controller
public class WelcomeController 
{
    @Value("${application.message:Hello World}")
    private String message = "Hello World";
    @Autowired
    protected AccountService accountService;
    @RequestMapping("/")
    public String welcome(Map<String, Object> model) 
    {
        //Попытка получить аккаунт под номером 23
        Account account = accountService.findOne("23");
        if(account == null){
            //Если при создании аккаунта возникли проблемы, верните виджет для отображения состояния ошибки
            model.put("message", "Ошибка получения аккаунта!");
            model.put("account", "");
            return "welcome/show";
        }  
        //Вернуть виджет для отображения информации о 23 аккаунтах
        String accountInfo = "Ваш номер аккаунта составляет ".concat(account.getNumber());
        model.put("message", this.message);
        model.put("account", accountInfo);
        return "welcome/show";
    }
    @RequestMapping("foo")
    public String foo(Map<String, Object> model) {
        throw new RuntimeException("Foo");
    }
}
 

Шаг 7: в папке   в папке src/main/resource создать файл show.html of HTML templates -> welcome.

show.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Spring Boot Multimodule</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <div>
      <b>Сообщение:</b>
      <span th:text="${message}" />
    </div>
    <div>
      <b>Ваш аккаунт:</b>
      <span th:text="${account}" />
    </div>
</body>
</html>
 

Шаг 8: Откройте   application.properties файл, откройте  application messageи  thymeleafКонфигурация кэширования установлена  Нет.

application.properties

#Информация приложения
application.message = Hello User!
dummy.type = type-inside-the-war
#Конфигурация Spring Thymeleaf
spring.thymeleaf.cache = false
 

После создания всех указанных файлов, директория модуля приложения будет выглядеть следующим образом:

Давайте создадим второй модуль, то есть   model。

Шаг 9: Создайте   Maven Moduleимя   model。

Шаг 10: Откройте модель   pom.xml Модуль файла, и убедитесь, что тип обертки   jar.

pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>sample.multimodule</groupId>
        <artifactId>sample.multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sample.multimodule.model</artifactId>
    <packaging>jar</packaging>
    <name>Модуль проекта - Модель</name>
    <description>Модуль, содержащий все Сущности и Визуальные объекты, используемые в проекте. У него нет никаких зависимостей. 
    </description>
</project>
 

Шаг 11: в пакете   sample.multimodule.domain.entity。

в создании объекта с именем Account класс.

Account.java

package sample.multimodule.domain.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class Account 
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String number;
    private String type;
    private String creditCardNumber;
    /**
     * Создание пустого счета.
     */
    public Account() {
    }
    
    /**
     * Create a new account.
     * 
     * @param number
     *           the account number
     * @param id
     *           the account id
     */
    public Account(long id, String number) {
        this.number = number;
        this.id = id;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getCreditCardNumber() {
        return creditCardNumber;
    }
    public void setCreditCardNumber(String creditCardNumber) {
        this.creditCardNumber = creditCardNumber;
    }
}
 

После создания всех вышеуказанных файлов, каталог модели модуля будет следующим:

Давайте создадим   third модуль

Шаг 12: Создайте файл с именем   repository Maven модуль. strong>

Шаг 13: Откройте модуль приложения   pom.xml Файл, и убедитесь, что тип打包а   jar.

pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>sample.multimodule</groupId>
        <artifactId>sample.multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sample.multimodule.repository</artifactId>
    <packaging>jar</packaging>
    <name>Project Module - Repository</name>
    <description>Module that contains all repositories to be used in the project. Depends of Model Module.</description>
    <dependencies>
      <!-- Project modules -->
      <dependency>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule.model</artifactId>
        <version>${project.version}</version>
      </dependency>
      <!-- Spring Boot dependencies -->
      <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <scope>runtime</scope>
      </dependency>
    </dependencies>
    
</project>
 

Шаг 14: в пакете   sample.multimodule.repository

Создайте имя   AccountRepository класс.  
  AccountRepository.java

package sample.multimodule.repository;
import org.springframework.data.domain.*;
import org.springframework.data.repository.*;
import org.springframework.stereotype.Repository;
import sample.multimodule.domain.entity.Account;
@Repository
public interface AccountRepository extends CrudRepository<Account, Long> 
{
    Account findByNumber(String number);
}
 

После создания всех указанных файлов директория модуля хранилища будет выглядеть следующим образом:

Давайте создадим  четвертыммодуль, который является   service-api.

Шаг 15: Создайте файл с именем   service-api Maven модуль.

Шаг 16 : Откройте <strong>приложениеВ файле > pom.xml service-api и убедитесь, что тип打包а составляет   jar.  

pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>sample.multimodule</groupId>
        <artifactId>sample.multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sample.multimodule.service.api</artifactId>
    <packaging>jar</packaging>
    <name>Модуль Проекта - API Служб</name>
    <description>Модуль, содержащий API всех проектных служб. Зависит от Модуля Модели.</description>
    <dependencies>
      <!-- Project Modules -->
      <dependency>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule.model</artifactId>
        <version>${project.version}</version>
      </dependency>
    </dependencies> 
</project>
 

Шаг 17: Создайте имя   пакета sample.multimodule.service.api.

Шаг 18: Создайте имя   Класс AccountNotFoundExceptionЕсли не найден этот счет, будет обработана исключительная ситуация.

AccountNotFoundException.java

package sample.multimodule.service.api;
public class AccountNotFoundException extends RuntimeException 
{
    private static final long serialVersionUID = -3891534644498426670L;
    public AccountNotFoundException(String accountId) 
    {
        super("No such account with id: " + accountId);
    }
}
 

Шаг 19: Создайте файл с именем   класс AccountServiceОн предоставляет услуги, связанные с аккаунтом, такие как  поиски  созданиеаккаунт

AccountService.java

package sample.multimodule.service.api;
импортировать java.util.List;
import sample.multimodule.domain.entity.Account;
public interface AccountService 
{
    /**
     * Найдите аккаунт по предоставленному номеру.
     * 
     * @param number Номер аккаунта
     * @return аккаунт
     * @throws AccountNotFoundException если такого аккаунта не существует.
     */
    Account findOne(String number) throws AccountNotFoundException;
    /**
     * Создает новый аккаунт.
     * @param number
     * @return созданный аккаунт
     */
    Account createAccountByNumber(String number);
}
 

Создав все указанные файлы, каталог модуля service-api будет выглядеть следующим образом:

Шаг 20: Создайте файл с именем   service-impl Maven модуль.

Шаг 21: : Откройте приложение   service-impl of   pom.xml файл и убедитесь, что тип упаковки jar.

pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>sample.multimodule</groupId>
        <artifactId>sample.multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sample.multimodule.service.impl</artifactId>
    <packaging>jar</packaging>
    <name>Проектный модуль — Реализация сервиса</name>
    <description>Модуль, содержащий реализацию сервисов, определенную в модуле Service API. Зависит от модуля Repository и модуля Service API.</description>    
    <dependencies>
      <!-- Project Modules -->
      <dependency>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule.repository</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule.service.api</artifactId>
        <version>${project.version}</version>
      </dependency>
    </dependencies>
</project>
 

шаг 22: в пакете   sample.multimodule.service.impl。

в создании объекта с именем AccountServiceImpl класс.

AccountServiceImpl.java

пакет sample.multimodule.service.impl;
импортировать java.util.ArrayList;
импортировать java.util.List;
импортировать org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import sample.multimodule.domain.entity.Account;
import sample.multimodule.repository.AccountRepository;
import sample.multimodule.service.api.AccountService;
import sample.multimodule.service.api.AccountNotFoundException;
@Service
public class AccountServiceImpl implements AccountService 
{
@Value("${dummy.type}")
private String dummyType;
@Autowired
    private AccountRepository accountRepository;
    /**
     * @inheritDoc
     * <p/>
     * Dummy method for testing purposes.
     * 
     * @param number The account number. Set 0000 to get an @link AccountNotFoundException 
     */
    @Override
    public Account findOne(String number) throws AccountNotFoundException {
        if(number.equals("0000")) {
            throw new AccountNotFoundException("0000");
        }
        Account account = accountRepository.findByNumber(number);
        if(account == null){
          account = createAccountByNumber(number);
        }
        return account;
    }
    @Override
    public Account createAccountByNumber(String number) {
        Account account = new Account();
        account.setNumber(number);
        return accountRepository.save(account);
    }
    public String getDummyType() {
        return dummyType;
    }
    public void setDummyType(String dummyType) {
        this.dummyType = dummyType;
    }
}
 

Создание всех указанных выше файлов,   service-impl каталог модуля будет выглядеть так:

Теперь откройте  родительском pom файл,我们看到 все созданные Maven-модули находятся в  в родительском pomМетка. Мы не нуждаемся в ручной конфигурации.

Теперь убедитесь, что все пять модулей установлены и созданы, как показано ниже:

После создания всех модулей, основная директория проекта будет выглядеть так:

Шаг 23: Теперь, чтобы   SampleWebJspApplication.java Файл запускается как Java-приложение.

Шаг 24: Откройте браузер и вызовите URL http: //localhost: 8080. Оно возвращает  Сообщениеи аккаунт   23。