ToB企服应用市场:ToB评测及商务社交产业平台

标题: Maven 聚合工程的创建 [打印本页]

作者: 杀鸡焉用牛刀    时间: 2022-11-4 20:47
标题: Maven 聚合工程的创建
简单场景举例


聚合工程创建示例

说明:
注意:各个子工程的包名要保持一致
以下展示聚合工程各工程模块中 pom 示例:
【实际开发,接口应用子工程创建一个 SpringBoot 项目即可,其他公共子工程皆使用 maven 创建】
目录总览:(实际开发应该是父工程下多个公共工程,一个应用接口启动工程)

parent-project 的 pom.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.    
  7.    
  8.    
  9.    
  10.    
  11.    
  12.    
  13.     <groupId>com.luis</groupId>
  14.     <artifactId>parent-project</artifactId>
  15.     <version>1.0.0</version>
  16.    
  17.     <packaging>pom</packaging>
  18.    
  19.     <modules>
  20.         <module>common-project</module>
  21.         <module>a-project</module>
  22.         <module>b-project</module>
  23.         <module>c-project</module>
  24.     </modules>
  25.    
  26.     <properties>
  27.         <java.version>1.8</java.version>
  28.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  29.         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  30.         <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
  31.     </properties>
  32.    
  33.     <dependencies>
  34.         <dependency>
  35.             <groupId>org.springframework.boot</groupId>
  36.             <artifactId>spring-boot-starter-web</artifactId>
  37.         </dependency>
  38.         <dependency>
  39.             <groupId>org.projectlombok</groupId>
  40.             <artifactId>lombok</artifactId>
  41.             <optional>true</optional>
  42.         </dependency>
  43.         <dependency>
  44.             <groupId>org.springframework.boot</groupId>
  45.             <artifactId>spring-boot-starter-test</artifactId>
  46.             <scope>test</scope>
  47.             <exclusions>
  48.                 <exclusion>
  49.                     <groupId>org.junit.vintage</groupId>
  50.                     <artifactId>junit-vintage-engine</artifactId>
  51.                 </exclusion>
  52.             </exclusions>
  53.         </dependency>
  54.     </dependencies>
  55.    
  56.     <dependencyManagement>
  57.         <dependencies>
  58.             <dependency>
  59.                 <groupId>org.springframework.boot</groupId>
  60.                 <artifactId>spring-boot-dependencies</artifactId>
  61.                 <version>${spring-boot.version}</version>
  62.                 <type>pom</type>
  63.                 <scope>import</scope>
  64.             </dependency>
  65.         </dependencies>
  66.     </dependencyManagement>
  67.    
  68.     <build>
  69.         <plugins>
  70.             <plugin>
  71.                 <groupId>org.apache.maven.plugins</groupId>
  72.                 <artifactId>maven-compiler-plugin</artifactId>
  73.                 <version>3.8.1</version>
  74.                 <configuration>
  75.                     <source>1.8</source>
  76.                     <target>1.8</target>
  77.                     <encoding>UTF-8</encoding>
  78.                 </configuration>
  79.             </plugin>
  80.             <plugin>
  81.                 <groupId>org.springframework.boot</groupId>
  82.                 <artifactId>spring-boot-maven-plugin</artifactId>
  83.                 <version>2.3.7.RELEASE</version>
  84.                 <configuration>
  85.                     <mainClass>com.luis.AProjectApplication</mainClass>
  86.                 </configuration>
  87.                 <executions>
  88.                     <execution>
  89.                         <id>repackage</id>
  90.                         <goals>
  91.                             <goal>repackage</goal>
  92.                         </goals>
  93.                     </execution>
  94.                 </executions>
  95.             </plugin>
  96.         </plugins>
  97.     </build>
  98. </project>
复制代码
common-project 的 pom.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.    
  6.     <parent>
  7.         <artifactId>parent-project</artifactId>
  8.         <groupId>com.luis</groupId>
  9.         <version>1.0.0</version>
  10.     </parent>
  11.     <modelVersion>4.0.0</modelVersion>
  12.     <artifactId>common-project</artifactId>
  13. </project>
复制代码
a-project 的 pom.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.    
  5.     <parent>
  6.         <artifactId>parent-project</artifactId>
  7.         <groupId>com.luis</groupId>
  8.         <version>1.0.0</version>
  9.     </parent>
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>a-project</artifactId>
  12.     <dependencies>
  13.         
  14.         <dependency>
  15.             <groupId>com.luis</groupId>
  16.             <artifactId>common-project</artifactId>
  17.             <version>1.0.0</version>
  18.         </dependency>
  19.     </dependencies>
  20. </project>
复制代码
b-project 的 pom.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.    
  5.     <parent>
  6.         <artifactId>parent-project</artifactId>
  7.         <groupId>com.luis</groupId>
  8.         <version>1.0.0</version>
  9.     </parent>
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>b-project</artifactId>
  12.     <dependencies>
  13.         
  14.         <dependency>
  15.             <groupId>com.luis</groupId>
  16.             <artifactId>common-project</artifactId>
  17.             <version>1.0.0</version>
  18.         </dependency>
  19.     </dependencies>
  20. </project>
复制代码
c-project 的 pom.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.    
  5.     <parent>
  6.         <artifactId>parent-project</artifactId>
  7.         <groupId>com.luis</groupId>
  8.         <version>1.0.0</version>
  9.     </parent>
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>c-project</artifactId>
  12.     <dependencies>
  13.         
  14.         <dependency>
  15.             <groupId>com.luis</groupId>
  16.             <artifactId>common-project</artifactId>
  17.             <version>1.0.0</version>
  18.         </dependency>
  19.     </dependencies>
  20. </project>
复制代码
其他说明

dependencyManagement 和 dependencies 组件区别:
附实际开发案例参考

聚合工程案例各模块草图

fmmall 聚合工程项目各模块以及依赖管理一览图:

项目模块目录:

模块说明

父工程模块:fmmal
子工程模块:common、beans、mapper、service、api
注意:以上所有工程模块,除 api 是创建的 SpringBoot 项目,其他模块都是创建的 maven 项目。
聚合工程中的子工程,除了接口工程(需要启动运行)需要创建为 SpringBoot 工程外,其他工程一般创建为 maven 工程,为接口工程提供复用服务。(如 common、beans、mapper、service 等此类工程)
依赖配置说明

依赖传递:B 依赖 C,A 又依赖 B,则 A 也依赖 C。(C 有的,A 也会有)
关于聚合工程 install 问题

因为是聚合工程,所以一定存在工程之间互相依赖;而被依赖的工程通常是需要打包后才可供给其他工程使用的。
在开发环境中,虽然我们直接运行启动类也可正常调用相关代码服务,但是我们一般会先将父工程 install一下,保证所有子工程都可正常打包后,再运行接口启动类运行项目。
基于以上说明,如果父工程 install 出现问题,如提示“程序包xxx不存在,找不到符号”,可参考以下解决办法:
原因分析:
项目 build 过程出现问题,个人估计一般这种情况就是依赖问题,pom.xml 中导入有问题,有可能是 springboot 自身的编译插件 spring-boot-maven-plugin 导致的。
  1. <build>
  2.     <plugins>
  3.         <plugin>
  4.             <groupId>org.springframework.boot</groupId>
  5.             <artifactId>spring-boot-maven-plugin</artifactId>
  6.         </plugin>
  7.     </plugins>
  8. </build>
复制代码
解决方案:
不要将此插件放到顶级父工程中,在需要打成可执行 jar 的地方添加就好,如果是需要被依赖的,就不要添加此插件!
分析:结合此聚合案例,我们需要将此插件放到 api 接口工程中,它不是顶级工程,它不需要被依赖,它需要打成可执行 jar!
install 相关,关于包明明存在,却出现编译错误:程序包不存在的问题,详细可参考:点击查看原博文
聚合工程各 pom.xml 示例

ffmall 父工程的 pom.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.    
  7.    
  8.    
  9.    
  10.    
  11.    
  12.    
  13.     <groupId>com.luis</groupId>
  14.     <artifactId>fmmall</artifactId>
  15.     <version>2.0.1</version>
  16.    
  17.     <packaging>pom</packaging>
  18.    
  19.     <modules>
  20.         <module>common</module>
  21.         <module>beans</module>
  22.         <module>mapper</module>
  23.         <module>service</module>
  24.         <module>api</module>
  25.     </modules>
  26.    
  27.     <properties>
  28.         <java.version>1.8</java.version>
  29.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  30.         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  31.         <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
  32.     </properties>
  33.    
  34.     <dependencies>
  35.         <dependency>
  36.             <groupId>org.projectlombok</groupId>
  37.             <artifactId>lombok</artifactId>
  38.             <optional>true</optional>
  39.         </dependency>
  40.         
  41.         
  42.         
  43.         
  44.         
  45.         
  46.         
  47.         
  48.         
  49.         
  50.         
  51.     </dependencies>
  52.    
  53.     <dependencyManagement>
  54.         <dependencies>
  55.             <dependency>
  56.                 <groupId>org.springframework.boot</groupId>
  57.                 <artifactId>spring-boot-dependencies</artifactId>
  58.                 <version>${spring-boot.version}</version>
  59.                 <type>pom</type>
  60.                 <scope>import</scope>
  61.             </dependency>
  62.         </dependencies>
  63.     </dependencyManagement>
  64.    
  65.    
  66.    
  67.    
  68.    
  69.    
  70.    
  71.    
  72.    
  73.    
  74.    
  75.    
  76.    
  77.    
  78.    
  79.    
  80.    
  81.    
  82.    
  83.    
  84.    
  85.    
  86.    
  87.    
  88.    
  89.    
  90.    
  91.    
  92.    
  93.    
  94.    
  95. </project>
复制代码
common 子工程的 pom.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <parent>
  6.         <artifactId>fmmall</artifactId>
  7.         <groupId>com.luis</groupId>
  8.         <version>2.0.1</version>
  9.     </parent>
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>common</artifactId>
  12.    
  13.     <packaging>jar</packaging>
  14. </project>
复制代码
beans 子工程的 pom.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <parent>
  6.         <artifactId>fmmall</artifactId>
  7.         <groupId>com.luis</groupId>
  8.         <version>2.0.1</version>
  9.     </parent>
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>beans</artifactId>
  12.    
  13.     <packaging>jar</packaging>
  14. </project>
复制代码
mapper 子工程的 pom
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <parent>
  6.         <artifactId>fmmall</artifactId>
  7.         <groupId>com.luis</groupId>
  8.         <version>2.0.1</version>
  9.     </parent>
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>mapper</artifactId>
  12.    
  13.    
  14.     <dependencies>
  15.         
  16.         <dependency>
  17.             <groupId>com.luis</groupId>
  18.             <artifactId>beans</artifactId>
  19.             <version>2.0.1</version>
  20.         </dependency>
  21.         
  22.         <dependency>
  23.             <groupId>mysql</groupId>
  24.             <artifactId>mysql-connector-java</artifactId>
  25.             <version>5.1.47</version>
  26.         </dependency>
  27.         
  28.         <dependency>
  29.             <groupId>org.mybatis.spring.boot</groupId>
  30.             <artifactId>mybatis-spring-boot-starter</artifactId>
  31.             <version>2.1.4</version>
  32.         </dependency>
  33.         
  34.         <dependency>
  35.             <groupId>org.springframework.boot</groupId>
  36.             <artifactId>spring-boot-starter</artifactId>
  37.             <version>2.4.4</version>
  38.         </dependency>
  39.         
  40.         <dependency>
  41.             <groupId>com.alibaba</groupId>
  42.             <artifactId>druid-spring-boot-starter</artifactId>
  43.             <version>1.2.9</version>
  44.         </dependency>
  45.         
  46.         <dependency>
  47.             <groupId>org.springframework.boot</groupId>
  48.             <artifactId>spring-boot-starter-test</artifactId>
  49.             <version>2.4.4</version>
  50.         </dependency>
  51.         
  52.         <dependency>
  53.             <groupId>junit</groupId>
  54.             <artifactId>junit</artifactId>
  55.             <scope>test</scope>
  56.         </dependency>
  57.     </dependencies>
  58. </project>
复制代码
service 子工程的 pom
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <parent>
  6.         <artifactId>fmmall</artifactId>
  7.         <groupId>com.luis</groupId>
  8.         <version>2.0.1</version>
  9.     </parent>
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>service</artifactId>
  12.    
  13.    
  14.     <dependencies>
  15.         
  16.         <dependency>
  17.             <groupId>com.luis</groupId>
  18.             <artifactId>mapper</artifactId>
  19.             <version>2.0.1</version>
  20.         </dependency>
  21.         
  22.         <dependency>
  23.             <groupId>com.luis</groupId>
  24.             <artifactId>common</artifactId>
  25.             <version>2.0.1</version>
  26.         </dependency>
  27.     </dependencies>
  28. </project>
复制代码
api 子工程的 pom
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  5.          https://maven.apache.org/xsd/maven-4.0.0.xsd">
  6.    
  7.     <parent>
  8.         <groupId>com.luis</groupId>
  9.         <artifactId>fmmall</artifactId>
  10.         <version>2.0.1</version>
  11.     </parent>
  12.     <modelVersion>4.0.0</modelVersion>
  13.     <artifactId>api</artifactId>
  14.    
  15.     <dependencies>
  16.         
  17.         <dependency>
  18.             <groupId>com.luis</groupId>
  19.             <artifactId>service</artifactId>
  20.             <version>2.0.1</version>
  21.         </dependency>
  22.         <dependency>
  23.             <groupId>org.springframework.boot</groupId>
  24.             <artifactId>spring-boot-starter-web</artifactId>
  25.         </dependency>
  26.     </dependencies>
  27.    
  28.     <build>
  29.         <plugins>
  30.             <plugin>
  31.                 <groupId>org.apache.maven.plugins</groupId>
  32.                 <artifactId>maven-compiler-plugin</artifactId>
  33.                 <version>3.8.1</version>
  34.                 <configuration>
  35.                     <source>1.8</source>
  36.                     <target>1.8</target>
  37.                     <encoding>UTF-8</encoding>
  38.                 </configuration>
  39.             </plugin>
  40.             <plugin>
  41.                 <groupId>org.springframework.boot</groupId>
  42.                 <artifactId>spring-boot-maven-plugin</artifactId>
  43.                 <version>2.3.7.RELEASE</version>
  44.                 <configuration>
  45.                     <mainClass>com.luis.fmmall.ApiApplication</mainClass>
  46.                 </configuration>
  47.                 <executions>
  48.                     <execution>
  49.                         <id>repackage</id>
  50.                         <goals>
  51.                             <goal>repackage</goal>
  52.                         </goals>
  53.                     </execution>
  54.                 </executions>
  55.             </plugin>
  56.         </plugins>
  57.     </build>
  58. </project>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4