话不多说,直接进入正题(maven版本3.5.4):
聚合项目结构:其中父模块的打包方式为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>
子模块间的依赖关系为:
common --> pojo --> dao --> service -->api
其中:
common层定义一些基本的springframework的依赖, 方便下面的模块继承.
pojo是实体类层.
dao是数据持久层.
service是业务逻辑层.
api是web接口层(Controller层).
在其中的api层(springboot启动主类在这一层),也就是最顶级的子模块的pom添加maven打包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">
<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>
接下来在父模块下运行命令:mvn clean package -Dmaven.test.skip=true
可以看见maven自动根据我们模块的依赖顺序构建好了项目.
到这一步,我们的jar包就已经打包好, 我们直接到api模块下的target目录下找到slife-dev-api-1.0-SNAPSHOT.jar可执行jar包,这里我复制到桌面运行即可:注意:
- mvn打包springboot项目的插件不能放在父模块的pom中, 因为这会让子模块都继承这个插件, 在子模块common, pojo, dao, service中是没有主类的,所以打包时会提示找不到主类.
2.那么如果刚开始在slife-dev-api子模块下运行打包命令会怎样呢?, 其实这里会提示找不到service的jar包, 因为api模块依赖service, 解决方法是先将所有子模块都install到本地,直接在父模块下运行mvn clean install -Dmaven.test.skip=true
就行了.
网友评论