`
hdxiong
  • 浏览: 371754 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

classpath 和 java.ext.dirs 的区别

    博客分类:
  • Java
阅读更多
先说说我的遭遇:
以下是我到运行脚本
java -cp lib -Djava.ext.dirs=lib com.test.Test

之前一直运行正常,突然一天报如下错(但本地在eclipse里面运行始终正常)

java.io.IOException: javax.net.ssl.SSLKeyException: RSA premaster secret error
java.io.IOException: java.io.IOException: javax.net.ssl.SSLKeyException: RSA premaster secret error

开始怀疑是jdk问题,重装jdk还是不行。
因为用到httpclient,以为是版本问题,所以修改httpclient为4.0版本,并设置为信任任何网站,还是提示错误,大致是没有访问权限的意思。

无耐之下,开始研究服务器跟本地的区别(因为只有在服务器上才出错,本地是可以的)。jdk比较过了,一样的版本。没道理啊,下载服务器代码本地部署一份(因为本地用ubuntu,所以部署跟服务器一模一样),问题来了,线上到代码在本地也不行了。奇怪。。。。。继续缩小排查范围。比较跟之前在本地能正常运行的程序(因为代码一样,只有部署有稍微差别)。
抱着试一试到态度修改来以下代码:
java -cp lib -Djava.ext.dirs=lib com.test.Test

修改后为:
java -cp lib/test.jar com.test.Test

竟然运行OK啦,奇怪?????算了,先保证能运行再说!
可是问题又来了,我的log4j.xml不能打包到jar里啊,这样修改不方便,怎么加入到运行参数呢???
search。。。。。in。。。。baidu。。。。。。
得到解决方案:
-Dlog4j.configuration=file:/lib/log4j.xml

在修改后的代码追加以上代码,日志打印OK。

研究至此已经解决了本次遇到到问题。但是一想,如果我有多个jar呢?
经过尝试“classpth”是不支持通配符“*”的,所以目前能想到的唯一办法是一个一个追加到后面。

如果有多个配置文件呢?
......

算了,想想都可怕,原来失去”Djava.ext.dirs“这么可怕。。。。。。

抽时间还是算好好研究研究"-cp"和”-Djava.ext.dirs“的加载规则吧。



分享到:
评论
5 楼 lgh1992314 2017-12-06  
scugxl 写道
这个java.ext.dirs属于加载的JRE/LIB/EXT这个目录下的jar包,-cp只能使用jar包不能指定文件夹,你这个可以算法应该是在这个EXT目录下的。

-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
           用 ; 分隔的目录, JAR 档案
           和 ZIP 档案列表, 用于搜索类文件。

文件夹下的只能是类而不可以是jar包(无法加载)。
4 楼 Oneforher 2016-08-10  
java -Djava.ext.dirs 加载Lib后,%JAVA_HOME%\jre\lib\ext 下面的jar包就不会加载啦
3 楼 cxw1128 2015-11-11  
java -Djava.ext.dirs=/home/ice/StoreManager/lib:.: org.jn.iipg.icetoavro.StoreServer

应该是这样的吧
2 楼 scugxl 2015-01-28  
这个java.ext.dirs属于加载的JRE/LIB/EXT这个目录下的jar包,-cp只能使用jar包不能指定文件夹,你这个可以算法应该是在这个EXT目录下的。
1 楼 chenjinbo1983 2013-04-27  
这样试试
java  -Djava.ext.dirs=lib com.test.Test 

相关推荐

Global site tag (gtag.js) - Google Analytics