java -cp jar文件顺序不一致导致程序无法启动或报错

linux环境:
java -cp ./jar1.jar:./jar2.jar:./main.jar com.test.main.Main
java -cp ./main.jar:./jar1.jar:./jar2.jar com.test.main.Main

使用java -cp 命令的时候,classloader的加载顺序是从前往后的,并且会解析jar文件内的MANIFEST.MF文件内的Class-Path,所以如果具有相同包路径的class文件,在前面的会生效,后面的不会生效。

main.jar在MANIFEST.MF引用了jar_default.jar
jar1.jar和jar_default.jar都有一个class文件:com.haha.Conflict.class
第一种方式会使用jar1.jar的com.haha.Conflict.class
第二种方式会使用jar_default.jar的com.haha.Conflict.class

很多情况下只有一份业务代码,即上述样例中的main.jar,但是因为认证或者版本或者其它原因,不同的环境需要使用不同的三方包,即上述样例中的jar1.jar、jar2.jar、jar_default.jar,这时候一般使用java -cp来启动程序,将我们自己的程序放到最后才会达到我们期待的效果,否则会失败。

ps:最近和华为公司合作,因为使用了第二种方式导致在服务器启动一直通不过认证,但是在windows下使用相同命令成功了,是因为windows下没有jar_default.jar,所以启动成功了。经过一番折腾,了解java -cp机制后,在服务器使用了第一种方式成功了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值