网站首页 > 开源技术 正文
经常遇到 Maven 相关的问题,这是之前的文章:
- 这个 Maven 依赖的问题,你敢说你没遇到过:https://mp.weixin.qq.com/s/SzBbDtyRUrk_7LH8SUbGXQ
- Maven 快照版本要这样用才真的香!:https://mp.weixin.qq.com/s/S0X1qY4uRsAeaqiC80fyNA
今天再来一个,首先看下错误信息,一看就很熟悉,都是老朋友了,还是曾经那个味道。
Caused by: java.lang.ClassNotFoundException: net.sf.json.JSONException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 57 more
依赖的是 aliyun-log,aliyun-log 内部依赖了 json-lib,如下:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
从依赖上看没啥问题,然后看服务器上打包后的 lib 目录中有没有 json-lib 这个 jar 包。看了下确实有 json-lib-2.4.jar。
错误明确的告诉我们 JSONException 找不到,也就是没有加载到 json-lib 的包,这个时候需要看下 MANIFEST.MF 文件中 Class-Path 有没有设置 json-lib 的路径。
看了下,有对应的路径,值为 json-lib-2.4-jdk15.jar,可以看到,这个名称跟打包出来后的不一致,多了 jdk15。
这个时候再回过头来看上面的 classifier,里面指定了 jdk15。classifier 通常用于区分不同 jdk 版本所生成的 jar 包,如果指定了 classifier,那么 jar 就是要加上 classifier 的值才行,也就是 json-lib-2.4-jdk15.jar 是正确的。
现在问题很明显,就是打包时的问题,打包后的 jar 名称应该是 json-lib-2.4-jdk15.jar 才对,而现在是 json-lib-2.4.jar,才导致了 ClassNotFoundException。
然后看了下项目的打包方式,还是比较古老的 assembly,里面对打包的 jar 进行了名称的修饰。
<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>
格式已经固定死了,classifier 不在格式当中,所以打包后的 jar 名称就会被改掉。解决方式需要将 classifier 也定义在 outputFileNameMapping 中。
但是 classifier 这个不是每个 jar 都有的,如果直接使用 artifact.classifier 是不行的,没有 classifier 的就会出问题,这里需要有个判断。然后找了一个有就拼接,没有就不使用的${dashClassifier?},完美解决。
<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
文档参考:
http://maven.apache.org/plugins/maven-ear-plugin/examples/customize-file-name-mapping.html
关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud 微服务-全栈技术与案例解析》, 《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号猿天地发起人。
我整理了一份很全的学习资料,感兴趣的可以微信搜索「猿天地」,回复关键字 「学习资料」获取我整理好了的 Spring Cloud,Spring Cloud Alibaba,Sharding-JDBC 分库分表,任务调度框架 XXL-JOB,MongoDB,爬虫等相关资料。
- 上一篇: JSONP安全攻防技术(web安全攻防)
- 下一篇: 里程碑!用自己的编程语言实现了一个网站
猜你喜欢
- 2025-04-30 Mac 下php5.3-7.0的二进制包 ── PHP-OS
- 2025-04-30 如何把一个Python应用程序装进Docker
- 2025-04-30 为何推荐 JsonTree.js 做 JSON 可视化?
- 2025-04-30 Python进阶-day21:复习与小项目(python小项目练手)
- 2025-04-30 java项目相关知识点整理(java项目简介)
- 2025-04-30 Deepseek官方提示词教程(deep message)
- 2025-04-30 里程碑!用自己的编程语言实现了一个网站
- 2025-04-30 JSONP安全攻防技术(web安全攻防)
- 2025-04-30 maven 处理多版本 jar包依赖冲突(maven管理jar包冲突)
- 2025-04-30 npm + TypeScript使用workspace(npm @types)
你 发表评论:
欢迎- 最近发表
-
- 6月游戏推荐(二)(6月份新出的游戏)
- 37【源码】数据可视化:基于 Echarts + Python 动态实时大屏
- Kubernetes Kube-Proxy 组件 IPVS 模式工作原理及常用故障排查
- 《茶余饭后顶级英文歌曲精选》(茶余饭后的经典句子)
- rainx和MediaTek携手推出101产品生态,为5G FWA提供创新
- KAPITAL 推出蓝染风格 Aloha Shirt 系列
- 欧美经典怀旧歌曲Free loop-管不住的音符
- Mac 下php5.3-7.0的二进制包 ── PHP-OS
- 如何把一个Python应用程序装进Docker
- 为何推荐 JsonTree.js 做 JSON 可视化?
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)