SpringBoot+Maven多模塊項目(建立、依賴、打包可執行jar包部署測試)完整流程

 

 

 

開發環境:IDEA,
                  SprngBoot 2.0.4,
                  Maven 2.19.1
工程結構:
                             父工程fatherjava

                                                   子模塊  dao      (用於持久化數據跟數據庫交互)mysql

                                                   子模塊  entity    (實體類)git

                                                   子模塊  service (處理業務邏輯)web

                                                   子模塊  web       (頁面交互接收、傳遞數據,惟一有啓動類的模塊)redis

                                關係:         web依賴 service、dao、entityspring

                                                    service依賴 dao、entitysql

                                                    dao依賴 entity數據庫

                                                    entity誰都不依賴,獨立的apache

這裏我用比較常見的工程結構舉例說明,有些公司的項目可能會把模塊分的很細,或者會有兩個程序入口,也就是兩個能夠啓動的模塊!這個我在文章最後會作說明!縷清了思路其實沒那麼複雜!

tomcat

 

一,建立Maven多模塊項目

先創建外層父工程         File →new →project  選擇Spring Initializr          Next下一步到如下頁面

 

 

 

工程結構以下

接下來,把src整個刪掉,父工程不須要,由於父工程你就當它只有一個外殼就完了

接下來建立子模塊  工程上右鍵 → new → Module  選擇Spring Initaializr  下一步

重複以上動做,建立dao模塊,service模塊,web模塊

service模塊和entity模塊同樣什麼都不須要引入

dao模塊和web模塊能夠根據實際需求選擇引入mysql,mybatis,redis,web這些,我把個人貼出來

刪除每一個子模塊中沒用的文件,.mvn、.gitignore、daoiml、mvnw、mvnw.cmd文件只留下pom.xml

刪除除了web模塊之外其它模塊中的Applicatin啓動項,和resources目錄下的application.properties配置文件

以上動做操做完成之後若是你發現你的子模塊變成了文件夾,不要緊,找到Maven Projects刷新一下就行了

整理事後的項目結構是這樣的

以上項目的基本結構就完成了,接下來創建各自依賴

2、依賴關係

打開父pom.xml修改打包方式jar爲pom,注意:build內容也須要作替換,由於默認的spring-boot-maven-plugin這種方式,等到後期打包的時候他會一直提示你,你引入的依賴不存在!代碼以下

 

<?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>
    <!--父pom.xml-->
    <groupId>com.miu</groupId>
    <artifactId>father</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
 
    <name>father</name>
    <description>Demo project for Spring Boot</description>
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.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>
 
    <!--聲明你有四個兒子 -->
    <modules>
        <module>entity</module>
        <module>dao</module>
        <module>service</module>
        <module>web</module>
    </modules>
 
    <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>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <skipTests>true</skipTests>    <!--默認關掉單元測試 -->
                </configuration>
            </plugin>
        </plugins>
    </build>
 
</project>

這裏有個坑須要注意,dao、service、entity這三個模塊的pom.xml文件中不須要build 內容,直接幹掉

 

entity 的 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.miu</groupId>
    <artifactId>entity</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>entity</name>
    <description>Demo project for Spring Boot</description>
    <!--聲明父模塊-->
    <parent>
        <groupId>com.miu</groupId>
        <artifactId>father</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </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>
</project>

dao 的 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>
    <!--dao 模塊 pom.xml-->
    <groupId>com.miu</groupId>
    <artifactId>dao</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>dao</name>
    <description>Demo project for Spring Boot</description>
    <!--聲明父模塊-->
    <parent>
        <groupId>com.miu</groupId>
        <artifactId>father</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </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-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--dao 模塊 引入entity模塊-->
        <dependency>
            <groupId>com.miu</groupId>
            <artifactId>entity</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

service 模塊的 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.miu</groupId>
    <artifactId>service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
 
    <name>service</name>
    <description>Demo project for Spring Boot</description>
    <!--聲明父模塊-->
    <parent>
        <groupId>com.miu</groupId>
        <artifactId>father</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </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>
        <!--service模塊 引入entity模塊-->
        <dependency>
            <groupId>com.miu</groupId>
            <artifactId>entity</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--service模塊 引入dao模塊-->
        <dependency>
            <groupId>com.miu</groupId>
            <artifactId>dao</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

web模塊的 pom.xml 內容

 注意build部分,由於web模塊做爲程序的入口啓動,因此它須要打包,而且要指定Main Class

 

<?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.miu</groupId>
    <artifactId>web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>web</name>
    <description>Demo project for Spring Boot</description>
    <!--聲明父模塊-->
    <parent>
        <groupId>com.miu</groupId>
        <artifactId>father</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </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-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--web模塊 引入entity模塊-->
        <dependency>
            <groupId>com.miu</groupId>
            <artifactId>entity</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--web模塊 引入service模塊-->
        <dependency>
            <groupId>com.miu</groupId>
            <artifactId>service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--web模塊 引入dao模塊-->
        <dependency>
            <groupId>com.miu</groupId>
            <artifactId>dao</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 指定該Main Class爲全局的惟一入口 -->
                    <mainClass>com.miu.web.WebApplication</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--能夠把依賴的包都打包到生成的Jar包中-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

 

到此爲止全部的依賴所有完成!接下來就是測試!這裏只用簡單的測試來實驗!

3、代碼測試

entity模塊中建立  EntiyTest類

 

 dao模塊中建立  DaoTest類

service模塊中建立ServiceTest類

Web模塊中建立WebTest類

最後把web模塊中的application.properties文件補充一下就OK了,由於引入了mysql,redis等配置,因此數據源是要配的,否則運行起來會報錯找不到數據源!

server.port=8080
#-----------------------------------數據庫配置----------------------------------------
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123
#------------------------------------redis配置---------------------------------------
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.max-wait=-1ms
spring.redis.jedis.pool.min-idle=0
spring.redis.timeout=10000ms

  一切準備就緒,開始運行web模塊下的啓動類進行測試

 

4、打包可執行jar

看到上面的頁面就證實模塊之間的依賴沒有問題,調用正常,我這裏是用簡單的建立對象的這種方式來操做的,實際開發並非這種操做,大部分都是經過 @Autowired 註解 來實現的注入,這裏我就不作演示了,只要模塊之間調用沒問題,剩下的就是鋪代碼的事了,接下來還有最後一個打包問題,爲何要囉嗦那麼多還要說打包問題呢,由於我建議在項目架構之初,除了搭框架之外,最好是在最開始的時候就測試一下打包,尤爲是這種多模塊項目之間各類依賴的這種工程的打包,若是等你代碼寫的鋪天蓋地的時候你在去想怎麼打包,到時候有你頭疼的!若是你是按照我本章的流程一步步下來的話,那麼你徹底不用擔憂打包問題,由於全部的pom.xml有已經配置好了,只須要動手運行 package打包動做就好了,第一次打包不須要clean,記住之後每次打包以前clean一下,關於爲何打jar包,不打war包這個問題,還有其它會遇到的問題,在文章最後會作說明!
---------------------

 

 雙擊運行package,看到BUILD SUCCESS  就證實打包成功了,如此簡單?告訴你就是這麼簡單,前提是你的每個模塊下的pom.xml要配置好,誰須要打包,誰不須要打包,誰依賴誰,父工程是否聲明瞭子模塊,子模塊是否聲明瞭父工程是誰,這些是重點!

 

接下來去找你工程目錄,web文件夾下的target文件夾,剛纔打包好的jar文件,就放在這裏了

 

而後我把這個jar文件上傳到個人測試服務器,使用 java -jar  web-0.0.1-SNAPSHOT.jar 命令來測試運行打包的可執行jar文件到底行不行!

運行成功,輸入我測試服務器地址測試也沒問題,到此爲止所有搞定

 

 

聚合工程舉一個簡單的例子,

整個工程你就看成一個公司,父工程(退休了什麼也不幹)只須要聲明有幾個兒子(子模塊)就完事了,

子模塊web聲明父工程是誰,就當他是大兒子,公司他管事,pom.xml文件須要打包,須要build配置,須要其它三個兄弟幫助

其它子模塊聲明父工程是誰,之間關係都是兄弟,不須要打包,哪裏須要去哪裏!

在此我說一下重點和須要注意的地方!
---------------------

1.父pom.xml 打包方式,jar要更改成pom,build 須要更改

2.不須要打包的模塊pom.xml文件中不要寫<build>,全刪掉,例若有些工程中的common模塊,utils模塊,entity模塊,service模  塊都不須要打包

3.聲明父工程時,填寫父工程位置<relativePath>../pom.xml</relativePath>

4.關於applicatin.properties配置文件,只須要在啓動的模塊中配置就能夠了,

5.關於打包爲何打包jar包,不打war包,打war包目的是war包能夠運行在tomcat下,可是SpringBoot是內置tomcat,若是你打war包,前提是幹掉內置的tomcat,而後才能打包,各類麻煩,直接打包可執行jar包,使用java -jar 命令就能夠完美的運行起來很方便!

6.真實開發中使用@Autowired 註解 來實現注入,而不是new對象這種方式,因此可能會產生注入之後報錯,是由於你的啓動類上沒有配置掃描,使用

@ComponentScan(basePackages = "你的路徑")註解來解決,若是你使用的持久層是Mybatis,那麼你的mapper也須要掃描,在啓動類上使用
@MapperScan("你的mapper文件地址")註解來解決,算了仍是貼個圖片吧
---------------------

相關文章
相關標籤/搜索