話不多說(shuō),直接進(jìn)入正題(maven版本3.5.4):
聚合項(xiàng)目結(jié)構(gòu):
其中父模塊的打包方式為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.pjqdyd</groupId>
<artifactId>slife-dev</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Slife-dev</name>
<description>slife-dev-back-end</description>
<modules>
<module>slife-dev-common</module>
<module>slife-dev-pojo</module>
<module>slife-dev-dao</module>
<module>slife-dev-service</module>
<module>slife-dev-api</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
</project>
子模塊的打包方式都為<packaging>jar</packaging>
子模塊間的依賴關(guān)系為:
common --> pojo --> dao --> service -->api
其中:
common層定義一些基本的springframework的依賴, 方便下面的模塊繼承.
pojo是實(shí)體類層.
dao是數(shù)據(jù)持久層.
service是業(yè)務(wù)邏輯層.
api是web接口層(Controller層).
在其中的api層(springboot啟動(dòng)主類在這一層),也就是最頂級(jí)的子模塊的pom添加maven打包springboot項(xiàng)目插件:
<?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">
<parent>
<artifactId>slife-dev</artifactId>
<groupId>com.pjqdyd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>slife-dev-api</artifactId>
<dependencies>
<dependency>
<groupId>com.pjqdyd</groupId>
<artifactId>slife-dev-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
接下來(lái)在父模塊下運(yùn)行命令:mvn clean package -Dmaven.test.skip=true

可以看見(jiàn)maven自動(dòng)根據(jù)我們模塊的依賴順序構(gòu)建好了項(xiàng)目.
到這一步,我們的jar包就已經(jīng)打包好, 我們直接到api模塊下的target目錄下找到slife-dev-api-1.0-SNAPSHOT.jar可執(zhí)行jar包,這里我復(fù)制到桌面運(yùn)行即可:
注意:
- mvn打包springboot項(xiàng)目的插件不能放在父模塊的pom中, 因?yàn)檫@會(huì)讓子模塊都繼承這個(gè)插件, 在子模塊common, pojo, dao, service中是沒(méi)有主類的,所以打包時(shí)會(huì)提示找不到主類.
2.那么如果剛開(kāi)始在slife-dev-api子模塊下運(yùn)行打包命令會(huì)怎樣呢?, 其實(shí)這里會(huì)提示找不到service的jar包, 因?yàn)閍pi模塊依賴service, 解決方法是先將所有子模塊都install到本地,直接在父模塊下運(yùn)行mvn clean install -Dmaven.test.skip=true就行了.