java -jar命令运行 jar包时如何运行外部依赖jar包
场景:
打包发不完,运行时。发现一个问题,
java java.lang.noclassdeffounderror: org/apache/commons/lang3/arrayutils
显示此,基本表明,没有这个依赖,如果在开发中,在maven的pom.xml 中引入即可;
<dependency> <groupid>org.apache.commons</groupid> <artifactid>commons-lang3</artifactid> <version>3.12.0</version> <!-- 使用最新版本或适合你项目的版本 --> </dependency>
但是;此时只有jar包,无法修改代码。如何解决呢?
解决:
直接在java -jar test.jar 时,添加参数。
方法一、启动参数添加: -xbootclasspath/a
java -xbootclasspath/a:custom-rt.jar -jar test.jar
方法二、使用extension classloader来加载
要让extension classloader加载你的类,需要:
将你的jar文件放入:
<java_home>/jre/lib/ext
目录(jdk 8及之前)- 或由
java.ext.dirs
系统属性指定的目录
或者运行时指定扩展目录:
java -djava.ext.dirs=/path/to/your/extensions -jar test.jar
此时此景,只能采用2;值的注意的注意⚠️的是;
使用java.ext.dirs
,需要同时添加 <java_home>/jre/lib/ext 和你自己的目录,不然只能使用你自己的目录。
实际语句:
java -djava.ext.dirs=$java_home/jre/lib/ext:/tmp/lib/ -jar test.jar
补充:java运行jar包指定外部依赖的jar
java运行jar包指定外部依赖的jar
程序在启动时经常会遇到指定外部依赖jar包的情况。
1. bootstrap classloader方式:
//在系统class加载后加载 java -xbootclasspath/a: yilai1.jar:yilai2.jar: -jar test.jar
注意:依赖的jar包间用冒号分割
缺点:依赖的jar包要一个一个指定
2. extension classloader方式:
java -djava.ext.dirs=$java_home/jre/lib/ext:/usr/local/libs -jar test.jar
注意:使用前确保已经配置好jdk环境变量
说明:$java_home/jre/lib/ext 的写法时固定的,后面冒号跟上自己存放要依赖的jar包的路径
优点:可以依赖指定路径下的多个jar包
到此这篇关于java -jar命令运行 jar包时如何运行外部依赖jar包的文章就介绍到这了,更多相关java -jar命令运行 jar包内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论