java -jar命令运行 jar包时如何运行外部依赖jar包
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