IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理

公司新项目需使用java技术栈,便使用IDEA搭建了一个多SpringBoot项目的聚合工程,因为初次使用,遇到了很多问题,maven打包时各种报错,在网上查了好多终于解决了,为巩固记忆,特作此记录。

 

一、先记录一下创建父子工程一些需要注意的地方:

 

1.创建父子工程
在IDEA中使用Spring Initializr的方式创建SpringBoot工程,GroupId为域.公司名,例如com.company,Artifact为项目名,例如testproject,主要注意父子项目保持组名一致
父项目创建好后,将.mvm、src文件夹,mvnw、mvnw.cmd文件直接删除,并修改pom.xml的packaging更改为pom。


2.创建子工程
选中父项目,鼠标右键,然后点击New—>Module,同样方式创建SpringBoot工程,注意项目的保存路径要加上'\子项目名',否则项目工程会乱掉


3.修改子项目的pom.xml文件,将其中的parent更改为对应父项目的信息,如下:

IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理_第1张图片

 

4.父项目的pom.xml中增加modules节点,并增加新增的子项目

IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理_第2张图片

5.添加依赖引用

一般情况下是,在父项目的pom.xml中用dependencyManagement统一版本管理,子项目中根据需要自行声明引用。
如下:
父项目pom.xml的properties中声明jar包版本号

IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理_第3张图片


    
        
        
            spring-boot-dependencies
            2.3.4.RELEASE
            pom
            import
        

        
        
            com.alibaba
            druid-spring-boot-starter
            ${druid.version}
        

       

         io.jsonwebtoken
        jjwt
         ${jwt.version}




        com.github.penggle
        kaptcha
        ${kaptcha.version}


....

        
        
            com.loxaump
            loxaump-common
            ${loxaump.version}
        

    
dependencyManagement依赖声明

子项目中声明所需引用,为防止子项目引用时,因为依赖jar包版本不一致,导致打包时找不到对应jar包错误(maven本地中会自动下载有依赖的版本),尽量子项目中不单独声明版本号。


    
    
        org.springframework
        spring-context-support
    

    
    
        org.springframework
        spring-web
    

    
    
        org.springframework.boot
        spring-boot-starter-security
    

....
子项目dependencies

 

二、maven打包时报错 程序包不存在

父子项目创建好后,使用maven工具

IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理_第4张图片

其他的子项目依赖common项目,打包后,明明正常打好了common的jar包,在maven本地仓中也能找到对应的版本,但是在打其他项目时,仍会提示程序包 com.loxaump.common.service.contants不存在等一系列类找不到。
如下图所示:

 

解决方法:
SpringBoot打成jar包我们一般使用spring-boot-maven-plugin这个插件,当配置了该插件后,运行“mvn package”进行打包时,会打包成一个可以直接运行的 JAR 文件,使用“java -jar”命令就可以直接运行。
1.因为spring-boot-maven-plugin在打成jar包时会默认找public static void main(String[] args){***}方法,这时候如果项目有多个main方法,就有问题了,需要删掉其他的main方法,只留SpringBoot的入口main方法,或者在pom.xml中用start-class属性指定项目main方法:

IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理_第5张图片

 

2..将父项目ROOT中的spring-boot-maven-plugin更换成org.apache.maven.plugins

IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理_第6张图片

更改为:

IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理_第7张图片

encoding即为:UTF-8

修改后,在重新打包,问题解决。

IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理_第8张图片

 

补充

如果打包时,报错:Cannot resolve xxx.xxx.xxx-xxx:unknown等错误时,应该是本地maven仓库中存在多个版本的jar包,并且因为其他原因导致某个jar包下载失败,这时,就到本地仓将jar包的文件夹删除,重新使用maven打包下载即可。

 

你可能感兴趣的:(IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理)