maven 打的包在哪_maven打包流程学习

本文记录了作者在工作中遇到的maven打包问题,包括SpringBoot多模块项目打包时找不到类和使用maven-shade-plugin打包Hadoop MR任务时出现的错误。作者通过分析错误和研究maven的工作原理,探讨了maven的生命周期、插件配置以及如何查看有效POM,以解决打包过程中遇到的问题。
摘要由CSDN通过智能技术生成

前言:

最近工作中遇到了几次跟maven打包相关的问题,每个问题上网查资料解决都花了不少时间,很影响工作进度。既然遇到好几次,每次都能发现知识盲点,干脆总结整理一下,啃掉这个难啃的骨头。

ps:最近看到了一个很有意思句子:因为今天不想跑步,所以才去跑,这是长距离跑者的思维方式。

转载:

正文:

还是首先描述一下最近遇到的几个问题吧:

一、初见

springboot多模块项目mvn打包遇到的问题 - 存在依赖但却无法发现符号

这个描述跟我遇到的问题差不多,简单说就是A\B两个工程是同一个父工程(X)下的子工程,因为A是一个springboot项目,所以父工程X就把parent设置成了:

org.springframework.boot

spring-boot-starter-parent

2.0.1.RELEASE

并且在A项目中配置了打包插件:

org.springframework.boot

spring-boot-maven-plugin

true

然后A\B的都是X。另一个同事开发A,在里边写了一个XXXUtil类。我开发B,为了使用XXXUtil,于是在B的dependency里依赖了A。

本地测试正常,然后就打算mvn install一下,结果就报错:

[INFO] ------------------------------------------------------------------------

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project main-jar: Compilation failure: Compilation failure:

[ERROR] /Users/zhaohui/workspace/Projects/IDEA/packing-test/main-jar/src/main/java/com.zh/Main.java:[3,25] 程序包com.zh.sbt.common不存在

[ERROR] /Users/zhaohui/workspace/Projects/IDEA/packing-test/main-jar/src/main/java/com.zh/Main.java:[8,51] 找不到符号

[ERROR] 符号: 变量 Common2

[ERROR] 位置: 类 com.zh.Main

[ERROR] -> [Help 1]

[ERROR]

奇怪了,测试的时候明明可以,怎么打包的时候就找不到类了呢?于是就打开A项目打出来打jar包,看一下里边是不是真的没有这个类:

zhaohuideMacBook-Pro:target zhaohui$ jar vtf spring-boot-test-1.0-SNAPSHOT.jar

...//此处省略部分输出

350 Thu Feb 28 23:15:32 CST 2019 BOOT-INF/classes/com/zh/sbt/common/Common2.class

347 Thu Feb 28 23:15:32 CST 2019 BOOT-INF/classes/com/zh/sbt/common/Common.class

822 Thu Feb 28 23:15:32 CST 2019 BOOT-INF/classes/com/zh/sbt/Main.class

...//此处省略部分输出

发现,包内的文件夹路径跟我项目的文件夹路径不一致,用luyten-0.5.3反编译代码,发现代码里的package行没有变化,所以springboot有可能使用了自定义的类加载器,把类加载器的根目录设置为了BOOT-INF/classes/,而mav

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值