详解Maven多模块打包遇到的问题解决⽅法
项⽬描述: springboot+springcloud+zookeeper+eureka+maven;为多模块多module的分布式架构;
项⽬⽬录结构如下
⽗⼯程为server⼯程,其中有多个⼦module⼯程:
1、独⽴⼦⼯程:db、model、quartz、redis、util、basecontroller;
2、独⽴功能模块:dao、service、controller;
其中dao、service、controller分别依赖db、model、quartz、redis、util、baseController,具体依赖关系如下图所⽰:
问题描述:在使⽤maven打包时打包报错;
报错描述:
解决⽅案:该报错为不到mainclass错误:有⼈说直接在maven插件中加上mainclass就好了,可是我打的是dao层的包,他就是⼀个jar,不是⼀个可执⾏程序,所以问题出在哪呢?请接着往下看:下⾯会报出程序包不存在的问题;
[INFO] Compiling 5 source files to D:\-server\-dao\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /D:/-server/-login-dao/src/main/java/com//system/dao/RoleDaoMapper.java:[3,33] 程序包maven打包本地jar包
[ERROR] /D:/-server/login-dao/src/main/java/com//system/dao/RoleDaoMapper.java:[4,33] 程序包
com..del不存在
<plugins>
<!--创建项⽬时⾃带的 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- ⾃⼰添加的 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.13.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
根据⽹上的资料,不到程序包的问题主要是在maven依赖相关的,我把所有的maven依赖都屡清楚了,可是还是构建不成功,这个时候就需要⼀些骚操作了,⽐如在打包我的登录模块的时候,你不能⼀个个的从底层⽹上⾯打包,你需要⼀次性把包打好了:
⾸先看⽗类的l依赖关系:
* 以下为重点*
⾸先要注意的是util、redis、model、db是独⽴的module,login-dao、login-service 都依赖那⼏个独⽴的module,login-controller⾃带启动类,可以运⾏(需要依赖以上⼏个module),login-controller的pom中需要添加启动类(不然会报不到主类(mainClass)错误);
这是前期的准备⼯作,在准备完成后,直接对⽗类进⾏maven的构建操作:先clean 在install;
最后完美解决问题
另外这⾥写⼏个多module项⽬maven构建时候需要注意的问题:
1、如果你的项⽬中有jsp,那么你不能打jar包,需要打war包,因为打jar包会不到jsp资源;
2、如果你的项⽬都是纯后台的代码,那么⽗类的pom对应的packaging为pom,⼦类的pom的packaging为jar
<groupId&</groupId>
<artifactId>ccx-XXX-server</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- ⽗project的pom⽂件:不是jar,是pom-->
<packaging>pom</packaging>
<groupId&</groupId>
<artifactId>ccx-XXX-server</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- ⽗project的pom⽂件:不是jar,是pom-->
<packaging>pom</packaging>
3、不要把所有的jar包的依赖都添加到⽗类的l⽂件中;因为你在对⼦类⼯程进⾏打包的时候,
maven会把⽗类l中所有的jar包都打到⼦类的jar包中,这样就多打了n遍不需要的jar包,所以,⼀个module需要哪个jar包就将这个jar 包放到对应的module中,不要⼀股脑全部放在⽗⼯程的l中;
4、注意jdk、maven和springboot的版本,我本地jdk1.8,springboot1.5.13、maven3.6,环境要⼀直,打包才不会出现错误。
5、对于上⾯出现的maven打包报错的问题,我有两点思考:
项⽬现状:项⽬所有的jar包依赖都添加到了⽗类的pom中,正常来讲,⽗类pom中仅仅规定版本号问题,不应该将jar包添加到⽗类的pom中;另外,正常情况下打包也应该是先打底层的包,在打上层的包,对于我⽬前的项⽬现状来说,最底层打⼀次包,⽗pom中所有的jar包都会被打进去,再⽹上⼀层打包的时候,⽗pom中的所有jar包⼜会被打⼀遍,⽽且还包括最底层的那个module,所以就会出问题,肯定打包不成功;
正确的⽅法应该是:⽗类pom中规定好依赖jar包的版本号(仅限于版本信息);⼦类module依赖哪个jar包就将这个jar包添加到该⼦类module的pom⽂件中;打包时候从最底层的开始打,然后⼀层层⽹上打包;这样就应该不会出现我这个问题了。
我觉得以上两点才是最重要的,如有错误,请指正,and欢迎交流
到此这篇关于详解Maven多模块打包遇到的问题解决⽅法的⽂章就介绍到这了,更多相关Maven多模块打包内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论