包含嵌套Maven項目的Spring Boot項目稱為 多模塊項目。在多模塊項目中,父項目充當(dāng)基礎(chǔ)Maven配置的容器。
換句話說, 多模塊項目是從管理一組子模塊的父pom構(gòu)建的?;?多模塊項目由父POM引用一個或多個子模塊來定義。
父maven項目必須包含 pom 的包裝類型使該項目成為聚合器。父項目的 pom.xml 文件包含子項目繼承的所有 模塊,公共依賴項和 屬性的列表。父pom位于項目的根目錄中。子模塊是實(shí)際的Spring Boot項目,它們從父項目繼承maven屬性。
當(dāng)我們運(yùn)行多模塊項目時,所有模塊都一起部署在嵌入式Tomcat Server中。我們也可以部署單個模塊。
父POM定義了 組ID,工件ID,版本,和 packaging。。在以前的Maven項目中,我們已經(jīng)看到父級POM定義了包裝 jar。。但是在多模塊項目中,父級 POM 定義包裝pom。打包pom引用了其他Maven項目。
將項目分為多個模塊是有用且易于維護(hù)的。我們還可以輕松編輯或刪除項目中的模塊,而不會影響其他模塊。當(dāng)我們需要分別部署模塊時,這很有用。
我們只需要在父pom中指定所有依賴項即可。所有其他模塊共享相同的pom,因此我們無需在每個模塊中分別指定相同的依賴項。
子模塊可以是任何項目,并且可以有任何包裝。我們可以自由地在模塊和束之間創(chuàng)建任何類型的依賴關(guān)系。
例如,我們正在創(chuàng)建 EAR (企業(yè)歸檔), WAR (Web ARchive)和 JAR (Java ARchive)文件。 JAR文件捆綁到war文件中,而war文件捆綁到EAR文件中。 EAR文件是可以在應(yīng)用程序服務(wù)器上部署的最終軟件包。
EAR文件包含一個或多個WAR文件。每個WAR文件都包含服務(wù)項目,該項目對JAR中的所有WAR文件和打包類型具有通用代碼。
子模塊是獨(dú)立的maven項目,它們共享父項目的屬性。 所有子項目都可以用一個命令來構(gòu)建,因?yàn)樗挥诟疙椖恐小?/span> 定義項目之間的關(guān)系更容易。
讓我們了解多模塊項目目錄結(jié)構(gòu)。
在下圖中,我們創(chuàng)建了一個名為 spring-boot-multi-module-project 的項目。它在目錄底部包含父 pom 。之后,我們創(chuàng)建了兩個 Maven模塊,分別命名為 module1 和 module2 。這兩個模塊包含自己的pom文件。
讓我們打開父POM,并查看在項目中創(chuàng)建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.nhooo</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>
上面的pom文件與前面的示例相同。但是在此 pom 文件中,需要注意兩件事: 包裝和 模塊。
當(dāng)我們創(chuàng)建多模塊時項目,我們需要在父pom文件中配置打包pom,而不是 jar。
<packaging>pom</packaging>
當(dāng)我們在項目中創(chuàng)建Maven模塊時,Spring Boot會在 module 標(biāo)簽內(nèi)的父pom中自動配置模塊,如下所示。
<modules> <module>module1</module> <module>module2</module> </modules>
現(xiàn)在,我們將查看 module1的pom文件中的內(nèi)容。
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.nhooo</groupId> <artifactId>spring-boot-multi-module-project</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.nhooo</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>
在此處,需要注意的是,上述pom文件不包含諸如 starter-web,web-mvc等之類的公共依賴項。它繼承了所有公共依賴項和屬性 父pom。
讓我們創(chuàng)建一個多模塊應(yīng)用程序示例。
在以下示例中,我們創(chuàng)建了一個名為 spring-boot-multimodule的maven項目。這是主要應(yīng)用程序。在主應(yīng)用程序中,我們創(chuàng)建了五個模塊,如下所示: 應(yīng)用 模型 存儲庫 service-api service-impl
應(yīng)用程序模塊
應(yīng)用程序模塊是項目的主要模塊。它包含應(yīng)用程序類,在其中定義了運(yùn)行Spring Boot Application所需的main方法。它還包含 應(yīng)用程序配置屬性,控制器,視圖和 資源。
應(yīng)用程序模塊包括模型模塊,服務(wù)實(shí)現(xiàn)模塊作為包含模型的依賴項模塊,存儲庫模塊和服務(wù)API模塊。
模型模塊
模型模塊包含 實(shí)體和在項目中使用的 Visual Objects 。
存儲庫模塊
存儲庫模塊包含 <在項目中使用的strong> 存儲庫。它取決于模型模塊。
服務(wù)API模塊
服務(wù)API模塊包含所有項目 服務(wù)。這也取決于模型模塊。
服務(wù)實(shí)現(xiàn)模塊
服務(wù)實(shí)現(xiàn)模塊可以實(shí)現(xiàn)服務(wù)。它取決于存儲庫模塊和服務(wù)API模塊。
父pom包含所有應(yīng)用程序模塊。它還包括一個以上模塊所需的所有常見依賴關(guān)系和屬性。因?yàn)轫椖恳褜pring IO Platform定義為父級,所以沒有版本就定義了依賴項。
讓我們了解我們創(chuàng)建的多模塊應(yīng)用程序的結(jié)構(gòu)。
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: 創(chuàng)建一個名為 spring-boot-multimodule的 Maven項目。
步驟2: 打開 pom.xml (父pom)文件,并將包裝類型 jar 更改為 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 平臺是生成的應(yīng)用程序的父應(yīng)用程序,能夠使用 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文件中要注意的一件事是,由于尚未創(chuàng)建Maven模塊,因此未配置?,F(xiàn)在,我們將如上所述創(chuàng)建一個Maven模塊。
步驟3: 創(chuàng)建一個名為 application的 Maven模塊 。
步驟4: 打開應(yīng)用程序模塊的 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: 創(chuàng)建 主要類。這是要運(yùn)行的類。
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。
下創(chuàng)建一個名稱為 WelocameController 的Controller類。
WelcomeController.java
package sample.multimodule.web; import java.util.Date; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import 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){ //如果創(chuàng)建帳戶時出現(xiàn)問題,請返回顯示錯誤狀態(tài)的視圖 model.put("message", "Error getting account!"); model.put("account", ""); return "welcome/show"; } //返回顯示23個帳戶信息的視圖 String accountInfo = "Your account number is ".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下創(chuàng)建一個名為 show.html 的 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>Message: </b> <span th:text="${message}" /> </div> <div> <b>Your account: </b> <span th:text="${account}" /> </div> </body> </html>
步驟8: 打開 application.properties 文件,將 application message和 thymeleaf緩存配置為 否。
application.properties
#應(yīng)用程序信息 application.message = Hello User! dummy.type = type-inside-the-war #Spring Thymeleaf 配置 spring.thymeleaf.cache = false
創(chuàng)建上述所有文件后,應(yīng)用程序模塊目錄如下所示:
讓我們創(chuàng)建第二個模塊,即 model。
步驟9: 創(chuàng)建一個 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>Project Module - Model</name> <description>Module that contains all Entities and Visual Objects to be used in the project. It doesn't have any dependencies. </description> </project>
步驟11: 在包 sample.multimodule.domain.entity。
下創(chuàng)建一個名稱為 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; /** * 創(chuàng)建一個空帳戶。 */ public Account() { } /** * 創(chuàng)建新帳戶。 * * @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; } }
創(chuàng)建所有上述文件后,模型模塊目錄如下:
讓我們創(chuàng)建 third 模塊
步驟12: 創(chuàng)建一個名為 repository的 Maven模塊。 strong>
步驟13: 打開應(yīng)用程序模塊的 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
創(chuàng)建一個名稱為 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); }
創(chuàng)建上述所有文件后,存儲庫模塊目錄如下所示:
讓我們創(chuàng)建 第四模塊,它是 service-api。
步驟15: 創(chuàng)建一個名為 service-api的 Maven模塊。
步驟16 : 打開 <strong應(yīng)用程序service-api 的> 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.api</artifactId> <packaging>jar</packaging> <name>Project Module - Service API</name> <description>Module that contains API of all project services. Depends of Model Module.</description> <dependencies> <!-- Project Modules --> <dependency> <groupId>sample.multimodule</groupId> <artifactId>sample.multimodule.model</artifactId> <version>${project.version}</version> </dependency> </dependencies> </project>
步驟17: 創(chuàng)建名稱為 sample.multimodule.service.api的軟件包。
步驟18: 創(chuàng)建一個名稱為 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: 創(chuàng)建一個名為 AccountService的類。它提供與帳戶相關(guān)的服務(wù),例如 查找和 創(chuàng)建帳戶。
AccountService.java
package sample.multimodule.service.api; import java.util.List; import sample.multimodule.domain.entity.Account; public interface AccountService { /** * 使用提供的帳號查找?guī)簟? * * @param number The account number * @return The account * @throws AccountNotFoundException if no such account exists. */ Account findOne(String number) throws AccountNotFoundException; /** * Creates a new account. * @param number * @return created account */ Account createAccountByNumber(String number); }
創(chuàng)建上述所有文件之后,service-api模塊目錄如下所示:
步驟20: 創(chuàng)建一個名為 service-impl的 Maven模塊。
步驟21: : 打開應(yīng)用程序 service-impl 的 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>Project Module - Service Implementation</name> <description>Module that contains services implementation defined on Service API module. Depends of Repository Module and Service API Module.</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。
下創(chuàng)建一個名稱為 AccountServiceImpl 的類。AccountServiceImpl.java
package sample.multimodule.service.impl; import java.util.ArrayList; import java.util.List; import 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; } }
創(chuàng)建上述所有文件后, service-impl 模塊目錄如下所示:
現(xiàn)在打開 父pom 文件,我們看到已創(chuàng)建的所有Maven模塊都在 中的父pom
現(xiàn)在確保所有五個模塊都已安裝創(chuàng)建,如下所示:
創(chuàng)建后所有模塊,主項目目錄如下所示:
步驟23: 現(xiàn)在,將 SampleWebJspApplication.java 文件作為Java應(yīng)用程序運(yùn)行。
步驟24: 打開瀏覽器并調(diào)用URL http: //localhost: 8080。它返回 消息和帳號為 23。