详解Maven多模块打包遇到的问题解决方法

 更新时间:2020年09月21日 09:16:20   作者:hp_yangpeng  
这篇文章主要介绍了详解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打包时打包报错;
报错描述:

[WARNING] The requested profile "dev" could not be activated because it does not exist.
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.13.RELEASE:repackage (default) on project axis-login-dao: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.13.RELEASE:repackage failed: Unable to find main class -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

解决方案:该报错为找不到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] 程序包com.ccx.axis.system.model不存在
[ERROR] /D:/-server/login-dao/src/main/java/com//system/dao/RoleDaoMapper.java:[4,33] 程序包com..system.model不存在

这个问题困扰了我两天,本身不太了解maven,所以趁着这个机会多了解了一下;如果你也遇到了类似的问题,而且你也不懂maven构建的生命周期,那么你要先去学习一下他,重要的事情说三遍:maven构建的生命周期!maven构建的生命周期!maven构建的生命周期!(这有链接 :https://www.jb51.net/article/127429.htm
然后再过来看这个问题:我再父类的pom.xml 中添加了maven构建的插件:

<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依赖都屡清楚了,可是还是构建不成功,这个时候就需要一些骚操作了,比如在打包我的登录模块的时候,你不能一个个的从底层网上面打包,你需要一次性把包打好了:

首先看父类的pom.xml依赖关系:

这里写图片描述 

* 以下为重点!!!!!*
首先要注意的是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>com.ccx</groupId>
  <artifactId>ccx-XXX-server</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!-- 父project的pom文件:不是jar,是pom-->
  <packaging>pom</packaging>
<groupId>com.ccx</groupId>
  <artifactId>ccx-XXX-server</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!-- 父project的pom文件:不是jar,是pom-->
  <packaging>pom</packaging>

3、不要把所有的jar包的依赖都添加到父类的pom.xml文件中;因为你在对子类工程进行打包的时候,maven会把父类pom.xml中所有的jar包都打到子类的jar包中,这样就多打了n遍不需要的jar包,所以,一个module需要哪个jar包就将这个jar包放到对应的module中,不要一股脑全部放在父工程的pom.xml中;

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多模块打包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实战之兼职平台系统的实现

    Java实战之兼职平台系统的实现

    这篇文章主要介绍了如何利用Java编写一个兼职平台系统,采用到的技术有Springboot、SpringMVC、MyBatis、ThymeLeaf等,感兴趣的小伙伴可以了解一下
    2022-03-03
  • Java简单使用redis-zset实现排行榜

    Java简单使用redis-zset实现排行榜

    这篇文章主要介绍了Java简单使用redis-zset实现排行榜,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • MyBatisPlus自定义JsonTypeHandler实现自动转化JSON问题

    MyBatisPlus自定义JsonTypeHandler实现自动转化JSON问题

    这篇文章主要介绍了MyBatisPlus自定义JsonTypeHandler实现自动转化JSON问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java 生成随机字符串数组的实例详解

    Java 生成随机字符串数组的实例详解

    这篇文章主要介绍了Java 生成随机字符串数组的实例详解的相关资料,主要是利用Collections.sort()方法对泛型为String的List 进行排序,需要的朋友可以参考下
    2017-08-08
  • java实现解析Cron时间表达式为中文描述

    java实现解析Cron时间表达式为中文描述

    这篇文章主要为大家详细介绍了java如何实现解析Cron时间表达式为中文描述,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-11-11
  • SpringBoot AOP处理请求日志打印功能代码实例

    SpringBoot AOP处理请求日志打印功能代码实例

    这篇文章主要介绍了SpringBoot AOP处理请求日志打印功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 详解MyBatis的SqlSession获取流程

    详解MyBatis的SqlSession获取流程

    SqlSession的获取是通过SqlSessionFactory的openSession() 方法,那么具体的获取流程是什么,所以本文就给大家详细讲解一下MyBatis的SqlSession获取流程,需要的朋友可以参考下
    2023-07-07
  • MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)

    MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)

    本文主要介绍了MyBatis-Plus实现2种分页方法,主要包括QueryWrapper查询分页和SQL查询分页,具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • Java中的==使用方法详解

    Java中的==使用方法详解

    这篇文章主要介绍了Java中“==”的使用方法,,==可以使用在基本数据类型变量和引用数据类型变量中,equals()是方法,只能用于引用数据类型,需要的朋友可以参考下
    2022-09-09
  • idea 配置checkstyle详细步骤

    idea 配置checkstyle详细步骤

    checkstyle是提高代码质量,检查代码规范的很好用的一款工具,本文简单介绍一下集成的步骤,并提供一份完整的checkstyle的代码规范格式文件,以及常见的格式问题的解决方法,需要的朋友可以参考下
    2023-11-11

最新评论