IDEA 的maven构建springboot父子工程,踩过的坑
工具:IDEA2020.2.3版本
在构建大型maven项目时,通常采用的工程类型,基本为聚合工程,我们公司也一样,决定引入springboot微服务架构,采用idea+maven+springboot的方式构建。由于springboot搭建聚合工程,与传统的spring+maven构建聚合工程,方式有部分出入,刚开始,搭建了几次,都没成功,经过多次尝试,最后搭建成功了,这里一方面,分享一下自己在搭建springboot聚合工程的注意事项,另一方面,给自己保留搭建资料,以免以后忘记了,再踩坑,具体搭建方法如下:
一:通过spring initializr 创建一个父子工程 例如:父工程admin,
在创建父工程的过程,有建议采用maven方式创建父工程,以后,搭建不成功,可能是因为在尝试阶段,不得其法所致。
- 1 将admin(父工程)下的 src 、.mvn、mvnw、mvnw.cmd 这四个文件全部删除
如图:
-
- 2在父工程(admin)中,保留springboot 的<parent></parent>配置,修改打包方式<packaging>为”pom”,同时,在<properties>中,统一编码等版本号为UTF-8
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/>
</parent>
<properties>
<start-class>com.uechv.eoffice.portal</start-class>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
1.3 手动配置依赖管理项,在构建聚合工程时,maven并不会给我们设定依赖管理项,得由我们自己配置:
<dependencyManagement></dependencyManagement>
1.4 在<dependencies> </dependencies>中配置<!--springboot依赖配置-->
--以前尝试搭建的时候,就是忽略了这个细节,导致多构建聚合工程都不成功
<!--springboot依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
1.5 在父工程中引入其他子模块的依赖并注明打包方式-type的属性为:jar
例如:
<dependency>
<groupId>com.uechv.eoffice</groupId>
<artifactId>dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
</dependency>
1.6 在<build></build>中添加一下属性添加maven-compiler-plugin属性,如果不配置该属性,执行package方法时会报错:程序包org.springframework.boot不存在。
【注】这个地方也是一大坑,之前构建时,也没注意到这个细节,后面参考同行的搭建有提到这里,所以在搭建时,添加进去,果然没问题
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.1</version>
</plugin>
</plugins>
</build>
二、 在子工程搭建时,注意配置的包路径,一定要在父工程之下,否则,构建出来的结果,并不是自己想要的,因为我采用的时IDEA2020.2.3版本开发工具,搭建的路径可能和其他开发版本不太一样,但与IDEA2020.2.2开发工具差别不大,
例如:我搭建时的父工程路径为:com.xxx.xxx.admin
三、创建子工程时,直接在admin工程上右键 > new > module 创建子模块。
【注意】:子工程创建的路径应为:例如: com.xxx.xxx.admin.dao,在其他版本的IDEA可能是”/”表示路径
四、只保留入口(web)的Application.java的main方法,其他子项目的main方法全部删除,否则,打包不成功
五、只保留入口(web)的application.properties,其他子项目的application.properties全部删除
如下图所示
六、在子项目中引入<parent></parent>
七、springboot打包方式,先对子工程的包挨个install打包,最后执行父工程 install打包
[备注]:如果不保留springboot父工程中的<parent></parent>,项目打包时就会出现如下报错:
****程序包org.springframework.boot不存在
****程序包org.springframework.boot.autoconfigure不存在
【这个坑】原因是,springboot针对spring-boot、autoconfigure、web、test的版本控制,是通过父工程<parent></parent>中的版本号进行版本控制,这一点与maven构建spring聚合工程的版本控制有点区别
本文地址:https://blog.csdn.net/qq_43185915/article/details/111878697