多模块
随着公司业务的增多,相应的代码增多,单机到多机,到微服务,集群逐渐演变;这时代码的良好管理和规划变得更加重要;
为了提高效率,根据业务的不同将揉作一团的业务代码分离出来,业务划分上分割清晰,提高代码复用率,技术转型非常重要;
实施落到实处最后就是代码这一层级的变动,可以采用多项目模式和多模块模式;
- 多项目:每个业务单独新建项目并编写相应逻辑
- 多模块:业务聚合在一个项目中的不同模块中,然后通过依赖调用实现业务逻辑
实施
文章中采用开发工具Idea;
第一步:(构建parent父模块)
新建Maven项目,保留pom.xml文件,src目录删除;

第二步:(构建子模块)
新建模块1,在parent父模块中增加子模块声明,便于其他子模块引用;
新建模块2,重复上面步骤;

第三步:(配置打包规则)
parent父模块中可以进行版本依赖管理(全局管理),子模块声明,远程仓库发布配置; parent父模块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>
<!-- parent必须使用pom格式打包并上传到仓库 -->
<packaging>pom</packaging>
<parent>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
</parent>
<modules>
<module>pax-bff-model</module>
<module>pax-bff-web</module>
<module>pax-bff-core</module>
</modules>
<groupId>cn.dfd.mars.paxbff</groupId>
<artifactId>pax-bff-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 全局版本管理 -->
<properties>
<pax-bff.version>0.0.1-SNAPSHOT</pax-bff.version>
<mapper-spring-boot-starter.version>1.1.3</mapper-spring-boot-starter.version>
<swagger.version>2.9.2</swagger.version>
<message.version>0.0.16</message.version>
<fastjson.version>1.2.62</fastjson.version>
<jackson-databind.version>2.9.9.3</jackson-databind.version>
<spring-cloud.version>2.1.4.RELEASE</spring-cloud.version>
</properties>
<!-- 依赖管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>cn.dfd.mars.paxbff</groupId>
<artifactId>pax-bff-model</artifactId>
<version>${pax-bff.version}</version>
</dependency>
<dependency>
<groupId>cn.dfd.mars.paxbff</groupId>
<artifactId>pax-bff-core</artifactId>
<version>${pax-bff.version}</version>
</dependency>
<!--通用mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper-spring-boot-starter.version}</version>
</dependency>
<!--token-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.8.3</version>
</dependency>
<!--swagger-->
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>${spring-cloud.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>${spring-cloud.version}</version>
</dependency>
<!--序列化-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-databind.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- parent父模块pom文件上传到远程仓库 -->
<distributionManagement>
<repository>
<id>maven-public</id>
<name>snapshot</name>
<url>http://xxx/ssss/</url>
</repository>
</distributionManagement>
</project>
子模块直接引入其他子模块,对外暴露的子模块需要发布处理配置(如下);
子模块1:
<?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>pax-bff-parent</artifactId>
<groupId>cn.skio.mars.paxbff</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>pax-bff-model</artifactId>
<!-- 子模块打包方式为jar,统一,看公司打包方式,现在基本都是jar -->
<packaging>jar</packaging>
<!-- 子模块不需要部署到仓库 -->
<properties>
<maven.deploy.skip>true</maven.deploy.skip>
</properties>
<dependencies>
<!--数据库映射主键-->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<scope>provided</scope>
</dependency>
<!--序列化-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
对外暴露子模块:
<?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>pax-bff-parent</artifactId>
<groupId>cn.dfd.mars.paxbff</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>pax-bff-web</artifactId>
<!-- 真正要发布的是此模块,所以不上传到仓库 -->
<properties>
<maven.deploy.skip>true</maven.deploy.skip>
</properties>
<dependencies>
<!-- 子模块依赖 -->
<dependency>
<groupId>cn.dfd.mars.paxbff</groupId>
<artifactId>pax-bff-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 跳过测试,工期比较近,测试略过 -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
以上就是Maven多模块项目创建,发布,打包的全过程,有问题欢迎留言;