场景:

因为之前用到的是,基于springboot框架所搭建的maven工程,而且都是相互独立的。现研发经理要求将所有工程进行整合和规范化,所以抽出一个parent父工程,base基础模块(包含一些公用的实体类和工具类等),以及其他子模块(Module A、 Module B …)。Module A 以及Module B工程都需要依赖base工程。

问题:

在对Module A进行打包时,出现问题:Module A中所依赖的base工程的util程序包不存在。即使能打包成功,用java -jar启动jar包也会报Class Not Found,依赖的base工程的类找不到。

解决方案:

未解决之前在base工程的pom.xml中maven插件的配置如下:

org.springframework.boot

spring-boot-maven-plugin

解决base工程的pom.xml的maven配置如下:

org.springframework.boot

spring-boot-maven-plugin

exec

原因分析:

spring-boot-maven-plugin打包出来的jar是不可依赖的

我们现在整合后的maven项目有一个parent工程,打包类型为pom,下面多个spring-boot工程作为它的module,分别为base和moduleA,moduleB。假如moduleA依赖于base。如果你在base中使用了spring-boot-maven-plugin的默认配置build,或者在parent工程中使用spring-boot-maven-plugin的默认配置build。那么在clean package的时候会发现moduleA找不到base中的类。原因就是默认打包出来的jar是不可依赖的。

解决方案:

官方告诉我们,你如果不想移代码,好吧,我这样来给你解决,给你打两个jar包,一个用来直接执行,一个用来依赖。于是,你需要指定一个属性classifier,这个属性为可执行jar包的名字后缀。比如我设置exec,原项目名为Vehicle-business。那么会得到两个jar:Vehicle-business.jar和Vehicle-bussiness-exec.jar

官方文档位置:84.5 Use a Spring Boot application as a dependency

总结:回到聚合maven上,如果你在parent工程中使用了spring-boot-maven-plugin作为builder,那么你的依赖module一定要用解决方案二来设置。否则你不在parent工程中用spring-boot-maven-plugin作为builder,而在需要打包的module上使用。

一般parent工程的maven插件配置如下:

org.springframework.boot

spring-boot-maven-plugin

1.8

1.8

repackage

被依赖的maven子模块的maven插件配置如下(其余maven子模块就不需要配置):

org.springframework.boot

spring-boot-maven-plugin

exec

其他的坑:

1.jdk8一定要指明

不指明的话在开发工具里运行没有一点问题,如果你没有用到java8的特性打包也没有问题。一旦你用到了java8的特性,而且使用spring-boot-maven-plugin作为builder,一定要指明jdk版本。不然你会收到类似不识别Lambda,请使用resource8这样的错误。

parent工程pom文件:

4.0.0

org.springframework.boot

spring-boot-starter-parent

1.5.6.RELEASE

com.demo

demo-parent

pom

1.0-SNAPSHOT

demo-base

demo-sync

demo-pattern

UTF-8

UTF-8

1.8

1.5.6

org.springframework.boot

spring-boot-devtools

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

org.springframework.cloud

spring-cloud-starter-eureka

org.springframework.cloud

spring-cloud-starter-ribbon

org.springframework.boot

spring-boot-starter-actuator

org.springframework.boot

spring-boot-starter-freemarker

redis.clients

jedis

org.springframework.data

spring-data-redis

org.springframework.boot

spring-boot-starter-redis

1.3.7.RELEASE

org.springframework

spring-jdbc

org.springframework

spring-aspects

org.mybatis

mybatis

3.2.8

org.mybatis

mybatis-spring

1.3.2

com.alibaba

fastjson

1.2.8

com.github.pagehelper

pagehelper

3.7.5

com.github.jsqlparser

jsqlparser

0.9.1

com.github.abel533

mapper

2.3.4

mysql

mysql-connector-java

com.jolbox

bonecp-spring

0.8.0.RELEASE

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-logging

org.springframework.boot

spring-boot-starter-log4j2

org.apache.logging.log4j

log4j-1.2-api

2.8.2

com.lmax

disruptor

3.3.6

org.dom4j

dom4j

2.1.0

io.springfox

springfox-swagger2

2.6.1

io.springfox

springfox-swagger-ui

2.6.1

org.springframework.cloud

spring-cloud-dependencies

Camden.SR7

pom

import

org.apache.maven.plugins

maven-resources-plugin

UTF-8

org.apache.maven.plugins

maven-compiler-plugin

1.8

1.8

UTF-8

org.springframework.boot

spring-boot-maven-plugin

base工程pom文件:

demo-base

4.0.0

com.demo

demo-parent

1.0-SNAPSHOT

org.springframework.boot

spring-boot-maven-plugin

exec

sync的pom文件:

demo-sync

4.0.0

com.demo

demo-parent

1.0-SNAPSHOT

com.demo

demo-base

1.0-SNAPSHOT

maven 打包时缺少文件_maven父子工程---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到...相关推荐

  1. idea项目不报错 启动时却提示一堆程序包找不到 的解决方法

    项目场景: 本来今天开开心心的来到公司,继续写bug,额不是bug,是继续垒代码,同事说昨天有提交的新内容,为了省事直接将springcloud的项目(项目使用的是maven构建和管理)全量更新了:然 ...

  2. IDEA:外部引入jar包,打包失败,提示程序包找不到

    在做项目的过程中,调用客户的接口往往需要客户提供的SDK,在开发的时候编译没有问题,一旦打包就会出现问题. 例如:程序包找不到的情况. 分析原因:打包的时候,maven仓库没有该包.需要将该包下载到m ...

  3. maven 打包时缺少文件_(三)Java资源文件和路径相关扫盲

    本来打算接着上文直接写登录功能的,顺便介绍下SpringSecurity,但是SpringSecurity和Spring以及SpirngBoot是如何衔接的又是个较为复杂的事情.看了下SpringBo ...

  4. maven 打包时缺少文件_解决Intellij Idea下使用Maven项目打包时部分文件缺失问题

    问题 Idea被越来越多的java开发者青睐,特别是丰富的插件极大方便了开发者.Idea虽然没有Eclipse的繁琐配置,但也会出现一些问题.问题如下: 一.在进行Maven项目打包的时候,会发现有的 ...

  5. maven多项目打包报错---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到 package xxx does not exist

    场景: springboot 项目多模块已成开发大势所趋,抽出一个parent父工程,子模块基础模块(包含一些公用的实体类和工具类等),以及其他子模块(Module A. Module B -).Mo ...

  6. Android 将Android项目打包成aar文件并在其他项目中引用,打包成jar包

    首先说一下jar包和aar包有什么区别? 1.打包之后生成的文件地址: *.jar:库/build/intermediates/bundles/debug(release)/classes.jar * ...

  7. maven多模块项目:程序包找不到,找不到符号

    问题描述: springboot搭建的多模块项目,maven管理,由两个模块组成,一个模块(order)依赖另一个模块(user)的jar包,但是依赖模块启动后报错,order模块报错:user下的程 ...

  8. jekenis父子结构项目打包_maven 父子工程打包 并且上传linux服务器

    先对父工程进行 mvn clean 再对子工程执行 install wagon:upload-single wagon:sshexec 使用wagon前提: 本地maven 的settings.xml ...

  9. maven 设置打包路径为模块_Maven项目的子模块不能打成jar包输出到lib目录

    这是项目的目录结构,admin模块是父模块 admin模块的pom.xml xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 htt ...

最新文章

  1. 初学者必学的C++项目!花3天搞定
  2. WP7下巧用MediaElement在雪藏中
  3. 进阶指令——wc指令【作用:统计文件内容信息(包含行数、单词数、字节数)】、date指令【作用:表示操作时间日期(读取、设置)】、cal指令【作用:用来操作日历的】、clear/ctrl + L指令
  4. 【kernel 中内存分配那点事】
  5. 容器生态系统 (续) - 每天5分钟玩转容器技术(3)
  6. iOS使用Charts框架绘制—柱形图
  7. 初二下册计算机考试试题,2017下半年计算机等级考试二级Java模拟试题及答案(18)...
  8. SAP Spartacus 在未登录状态下浏览器 local storage 里存储的数据
  9. pil库修改图片大小_Gvcode库:一个更简单的、华人开源的、自动生成验证码的python库...
  10. java 动态队列_RabbitMq之动态修改队列参数
  11. 自然语言处理以及对话系统知识点总结
  12. 面向对象技术第一讲 多态性
  13. 负载均衡获取客户端IP
  14. 蓝桥杯 ADV-82 算法提高 填充蛋糕
  15. zoj[3868]gcd期望
  16. 区块链入门实战教程—看完本文你也会开发区块链
  17. Swing JTree用法总结
  18. atitit uke产品线 attilax总结.docx 1. 知识聚合 知识检索 产品线 1 2. 爬虫产品线 1 3. 发帖机产品线 1 4. 发动机产品线 1 5. O2o产品线(旅游
  19. 拆t460拆机图解_ThinkPad T460P评测,二楼附ThinkPad T460P拆机图
  20. TortoiseSVN右键没有菜单

热门文章

  1. linux——进程(创建、终止、等待、替换)
  2. EntityFramework进阶——数据编辑与维护
  3. C#利用反射将实体类ListT转化为Datatable
  4. mysql中try的意思_java中try是什么意思
  5. pythonpath manager_python 路径操作工具 pathlib,比 os 模块好用太多
  6. java 对象流传输socket_Java Socket(二)使用TCP传输对象
  7. hexo评论_【前端简历加分】hexo框架搭建个人博客站点,手把手教学
  8. 华锋e路航x10升级工具_万商云集:疫情下火爆的电子合同,背后是企业数字化升级的必然...
  9. 求十个学生的平均成绩java,JAVA 声明一个数组,存一个学生的五门成绩。求该学生的总成绩、平均成绩。...
  10. SVN卸载,修复,等问题:依赖服务或组无法启动.(0x8007042c)解决之一