Springboot搭建多模組專案,拆分應用
工具:
- idea
首先,我們要搭建的一個專案有以下幾個模組
- demo-apply 應用模組
- demo-common 公用工具類
- demo-static 靜態資源
好,既然知道了我們想要做的事情,那麼對於這些模組,我們需要統一的parent專案,統一管理他們,下面就來新建一個demo-parent專案
下面一路next,直接預設就行,關於匯入其他依賴包,我們手動匯入,最後專案結構如下:
因為我們只需要demo-parent作為一個管理專案,所以不需要src,直接刪除即可,同時修改對應的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> <groupId>com.demo</groupId> <artifactId>demo-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging><!-- 注意:修改jar為pom --> <name>demo-parent</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </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>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!-- 注意: 因為我們不需要demo-parent是一個可執行的專案,所以修改原來的打包方式為maven打包方式 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build> </project>
好叻,demo-parent建立完畢,下面在此專案下新建我們需要的模組,
這裡注意一下,如果想要建立對應專案下的module專案,那麼滑鼠先選中該專案名稱(對照上圖)在選擇File>>new>>Module,因為所有的new都是相對你選中的目錄來的。
接下來一路操作,搞定三個模組,如下圖:
接下來,首先建立相互關係,demo-parent中配置子模組:
<?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> <groupId>com.demo</groupId> <artifactId>demo-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>demo-parent</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- 注意:加入子模組 --> <modules> <module>demo-apply</module> <module>demo-common</module> <module>demo-static</module> </modules> <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.plugin.version>3.1</maven.compiler.plugin.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven.compiler.plugin.version}</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build> </project>
分別修改3個子模組,共同依賴demo-parent:
demo-apply
<?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> <!-- maven可以繼承父專案中的引數,所以可以刪除子模組中定義 --> <!--<groupId>com.demo</groupId>--> <artifactId>demo-apply</artifactId> <!-- maven可以繼承父專案中的引數,所以可以刪除子模組中定義 --> <!--<version>0.0.1-SNAPSHOT</version>--> <packaging>jar</packaging> <name>demo-apply</name> <description>Demo project for Spring Boot</description> <parent> <groupId>com.demo</groupId> <artifactId>demo-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../pom.xml</relativePath><!-- lookup parent from repository --> </parent> <!-- maven可以繼承父專案中的引數,所以可以刪除子模組中定義 --> <!--<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> <!-- maven可以繼承父專案中的依賴,所以可以刪除子模組中定義 --> <!--<dependency>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-starter</artifactId>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-starter-test</artifactId>--> <!--<scope>test</scope>--> <!--</dependency>--> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
demo-common:
<?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>
<artifactId>demo-common</artifactId>
<packaging>jar</packaging>
<name>demo-common</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.demo</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath><!-- lookup parent from repository -->
</parent>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
demo-static:
<?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>
<artifactId>demo-static</artifactId>
<packaging>jar</packaging>
<name>demo-static</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.demo</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath><!-- lookup parent from repository -->
</parent>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
到這裡為止,demo-parent和3個子模組的相互關係已經建立成功。
接下來,我們需要搞定楚3個模組之間的關係
模組 | 打包方式 | 依賴模組 | 是否可執行 | 功能 |
---|---|---|---|---|
demo-apply | jar | demo-common/demo-static | 是 | 核心應用 |
demo-static | war | – | 否 | 靜態檔案,如頁面 |
demo-common | jar | – | 否 | 共用工具包 |
好,既然知道了模組的關係,接下里分別修改3個子模組
demo-apply:
<?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>
<artifactId>demo-apply</artifactId>
<packaging>jar</packaging>
<name>demo-apply</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.demo</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath><!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- 加入其餘模組的依賴 -->
<dependency>
<groupId>com.demo</groupId>
<artifactId>demo-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.demo</groupId>
<artifactId>demo-static</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 因為static是war打包方式 所以必須宣告,不然預設為jar包方式 -->
<type>war</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 當所依賴的其他模組,有啟動類的時候,需要以下配置,指定唯一啟動類,
本次事例未涉及其他模組有啟動類,可自行測試 -->
<configuration>
<!-- 指定該Main Class為全域性的唯一入口 -->
<mainClass>com.demo.demoapply.DemoApplyApplication</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal><!--可以把依賴的包都打包到生成的Jar包中-->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
demo-common
<?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>
<artifactId>demo-common</artifactId>
<packaging>jar</packaging>
<name>demo-common</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.demo</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath><!-- lookup parent from repository -->
</parent>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
同時由於不需要可執行,所以刪除demo-common下的啟動類和properties檔案,對應test檔案下預設生成的測試類,也要刪除。
demo-static:
<?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>
<artifactId>demo-static</artifactId>
<!-- 修改打包方式 -->
<packaging>war</packaging>
<name>demo-static</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.demo</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath><!-- lookup parent from repository -->
</parent>
<dependencies>
</dependencies>
<build>
<plugins>
<!-- 修改springboot的編譯外掛為maven編譯外掛 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
另外,由於打包成war包方式,所以必須在對應src/main/webapp/WEB-INF/下存在web.xml檔案,同時由於不需要可執行,所以刪除啟動類和properties檔案,對應test檔案下預設生成的測試類,也要刪除。
為了檢驗我們專案是否搭建正確,我們在demo-parent的pom中加入web依賴,這樣子專案可以直接繼承:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
同時在demo-apply的啟動類中加入以下程式碼:
package com.demo.demoapply;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class DemoApplyApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplyApplication.class, args);
}
@RequestMapping("hello")
public String hello() {
return "hello";
}
}
然後直接啟動該類,瀏覽器中訪問http://localhost:8080/hello,頁面如下,大功告成。
下面我們來驗證demo-parent部署正確
大功告成。