如何排除JRE中的指定Jar,仅加载Spring Boot War依赖的Jar?
解决Java ext目录Jar与Spring Boot War包Jar冲突的方法
以下几种方案可以帮你实现只加载War包内的Jar,排除JRE ext目录的冲突Jar:
临时应急方案(单应用生效)
启动应用时添加JVM参数,直接禁用JRE ext目录的加载:java -Djava.ext.dirs= -jar your-app.war如果是部署在Tomcat容器,修改
catalina.sh(Linux)或catalina.bat(Windows),在JAVA_OPTS中加入该参数:# Linux示例 JAVA_OPTS="-Djava.ext.dirs= $JAVA_OPTS"注意:这个操作会完全禁用JRE的ext目录,同一JVM下如果有其他依赖ext目录的应用,会受影响,仅适合临时测试或单应用环境。
彻底根治方案
直接删除Java ext目录下的冲突Jar。既然这个Jar已经包含在你的War包中,ext目录里的手动添加版本完全没有保留的必要,删除后从根源上避免冲突,这是最推荐的做法。容器级配置(Tomcat部署场景)
如果无法删除ext目录的Jar,可以修改Tomcat的conf/catalina.properties,调整类加载顺序,让War包内的Jar优先级更高:
找到common.loader配置项,移除其中指向java.ext.dirs的部分,修改后类似:common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"这样Tomcat会优先加载WEB-INF/lib下的Jar,跳过ext目录的冲突文件。
内容的提问来源于stack exchange,提问作者AHM200
相关产品推荐
相关产品推荐

