Spring-boot模塊化編程

1、建立聚合父工程
1.首先使用 Spring Initializr 來快速建立好一個Maven工程。而後刪除無關的文件,
只需保留pom.xml 文件。
複製代碼

而後在 pom.xml 裏面聲明該父工程包含的子模塊。(其它信息就不逐一講述了,
諸如繼承SpringBoot官方父工程以及統一依賴管理 請查看下面的註釋說明)

注意:這裏能夠不統一管理依賴的版本號,在模內部本身定義,若有引入其餘模塊,也要指定
版本信息

<?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">

    <!-- 基本信息 -->
    <description>SpringBoot 多模塊構建示例</description>
    <modelVersion>4.0.0</modelVersion>
    <name>springboot-integration</name>
    <packaging>pom</packaging>

    <!-- 項目說明:這裏做爲聚合工程的父工程 -->
    <groupId>com.hehe</groupId>
    <artifactId>springboot-integration</artifactId>
    <version>1.0.0.RELEASE</version>

    <!-- 繼承說明:這裏繼承SpringBoot提供的父工程 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.7.RELEASE</version>
        <relativePath/>
    </parent>

    <!-- 模塊說明:這裏聲明多個子模塊 -->
    <modules>
        <module>mm-web</module>
        <module>mm-service</module>
        <module>mm-repo</module>
        <module>mm-entity</module>
    </modules>

    <!-- 版本說明:這裏統一管理依賴的版本號 -->
    <dependencyManagement>
        <dependencies>

            <dependency>
                <groupId>com.hehe</groupId>
                <artifactId>mm-web</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.hehe</groupId>
                <artifactId>mm-service</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.hehe</groupId>
                <artifactId>mm-repo</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.hehe</groupId>
                <artifactId>mm-entity</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.42</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

複製代碼

2、建立子模塊(module)java

注:這裏是使用IDEA來建立子模塊,使用Eclipse的小夥伴可經過
Spring Initializr 構建,而後複製去進去父工程根目錄便可。

1.對着父工程右鍵 - New - Module - > 輸入 mm-web
2.對着父工程右鍵 - New - Module - > 輸入 mm-service
3.對着父工程右鍵 - New - Module - > 輸入 mm-repo
4.對着父工程右鍵 - New - Module - > 輸入 mm-entity
1~4 步驟完成後,分別調整它們的pom.xml 以繼承上面的父工程。

注意:Artifact id和Project name保持一致,Package name設置時把_用.分開
複製代碼

例如mm-web模塊的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>

    <!-- 基本信息 -->
    <groupId>com.hehe</groupId>
    <artifactId>mm-web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>mm-web</name>
//---------------------------------------------添加
    <!-- 繼承本項目的父工程 -->
    <parent>
        <groupId>com.hehe</groupId>
        <artifactId>springboot-integration</artifactId>
        <version>1.0.0.RELEASE</version>
    </parent>
//---------------------------------------------添加
    <!-- Web模塊相關依賴 -->
    <dependencies>
        <dependency>//-------------------------依賴其餘模塊
            <groupId>com.hehe</groupId>
            <artifactId>mm-service</artifactId>
        </dependency>
        <dependency>
            <groupId>com.hehe</groupId>
            <artifactId>mm-entity</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

複製代碼

3、編寫子模塊代碼mysql

4、運維部署(多模塊打包)web

1. 添加打包插件
注意:多模塊項目僅僅須要在啓動類所在的模塊添加打包插件便可!!
不要在父類添加打包插件,由於那樣會致使所有子模塊都使用
spring-boot-maven-plugin的方式來打包(例如BOOT-INF/com/hehe/xx),
而mm-web模塊引入mm-xx 的jar 須要的是裸露的類文件,即目錄格式爲(/com/hehe/xx)。
複製代碼

本案例的啓動模塊是 mm-web , 只需在它的pom.xml 添加打包插件(spring-boot-maven-plugin):spring

<!--多模塊打包:只需在啓動類所在模塊的POM文件:指定打包插件 -->
    <build>
        <plugins>
            <plugin>
                <!--該插件主要用途:構建可執行的JAR -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
複製代碼

4、總結sql

1.模塊化編程參考博客
2.對於父工程apache

1. 能夠刪除src目錄,.mvn目錄
2. 配置要修改<packaging>jar</packaging> => <packaging>pom</packaging>
添加:
    <!-- 模塊說明:這裏聲明多個子模塊 -->
	<modules>
		<module>wm-web</module>
		<module>wm-service</module>
	</modules>
刪除部分:
    <build>
		<plugins>
			<!--<plugin>-->
				<!--<groupId>org.springframework.boot</groupId>-->
				<!--<artifactId>spring-boot-maven-plugin</artifactId>-->
			<!--</plugin>-->
		</plugins>
	</build>
複製代碼

3.對於子模塊編程

替換父模塊配置
    <!--<parent>-->
		<!--<groupId>org.springframework.boot</groupId>-->
		<!--<artifactId>spring-boot-starter-parent</artifactId>-->
		<!--<version>2.1.0.RELEASE</version>-->
		<!--<relativePath/> &lt;!&ndash; lookup parent from repository &ndash;&gt;-->
	<!--</parent>-->
	到
    <!-- 繼承本項目的父工程 -->
	<parent>
		<groupId>com.example</groupId>
		<artifactId>module</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	
設置依賴的其餘模塊
    <!-- 繼承本項目的父工程 -->
	<dependency>
            <groupId>com.example</groupId>
            <artifactId>wm-service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>


對於提供公共服務的模塊
    須要註釋:
        <build>
		<!--<plugins>-->
			<!--&lt;!&ndash;<plugin>&ndash;&gt;-->
				<!--&lt;!&ndash;<groupId>org.springframework.boot</groupId>&ndash;&gt;-->
				<!--&lt;!&ndash;<artifactId>spring-boot-maven-plugin</artifactId>&ndash;&gt;-->
			<!--&lt;!&ndash;</plugin>&ndash;&gt;-->
		<!--</plugins>-->
	</build>

    對於模塊間注入對象的,訪問不到的
        啓動類添加:
            啓動類代碼以下:
            @SpringBootApplication
            @ComponentScan(basePackages = {"com.cp.springboot.web","com.cp.springboot.domain.bean"})
            public class WebApplication {
            
               public static void main(String[] args) {
                  SpringApplication.run(WebApplication.class, args);
            }
            }
        設置掃描包ComponentScan
複製代碼

1.參考博客segmentfault

相關文章
相關標籤/搜索