java ext.dirs_关于-Djava.ext.dirs使用问题

大家在linux环境下使用命令行执行java程序时,经常要使用到大量外部的jar包或class文件,一般我们有哪些方式可以用呢?

-classpath,命令格式:# java -classpath ,使用";"分隔

-cp ,这个命令一看就是-classpath的缩写,当然用途是一样的。

# java -cp ".\a.jar;.\b.jar" -jar myjar.jar MainClass # java -cp .;c:\dir1\lib.jar Test

-Djava.ext.dirs,命令格式:# java -Djava.ext.dirs=

下面说一下区别:

-cp 和 -classpath 一样,是指定java类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上使用分号“;”  分隔,linux上是使用冒号“:”分隔。不支持通配符,也不支持文件夹的方式,需要列出所有jar包,用点“.”代表当前路径,这个如果要引用好多jar包,要一个个加入到路径里,那写起来就头疼。

如:java -cp .;c:\classes\myClass.jar;d:\classes\1.jar packname.mainclassname。

-Djava.ext.dirs是通过设置系统属性的方式也加载jar包的,这个级别就有点高了,和-classpath的区别在于-Djava.ext.dirs会覆盖Java本身的ext设置,java.ext.dirs指定的目录由ExtClassLoader加载器加载,如果您的程序没有指定该系统属性(-Djava.ext.dirs=sss/lib)那么该加载器默认加载$JAVA_HOME/lib/ext目录下的所有jar文件。但如果你手动指定系统属性且忘了把$JAVA_HOME/lib/ext路径给加上,那么ExtClassLoader不会去加载$JAVA_HOME/lib/ext下面的jar文件,这意味着你将失去一些功能,例如java自带的加解密算法实现。具体说是jre的ext目录:D:\java\jdk1.8.0_40\jre\lib\ext。一般情况下普通程序运行并无差异,因为可以看到ext目录下也就几个jar,但是如果使用java.security相关类时,也就是使用加密解决相关的算法,就会发现-Djava.ext.dirs会导致library找不到相关类而报错。如报错:

NoSuchAlgorithmException: Cannot find any provider supporting RSA

这个错误当然也有可能是security\java.security文件中配置错误引起 。

当然也有解决方法:

1、将ext下相关jar包复制到新的ext director。

2、在-D.java.ext.dirs中配置多个目录。可以使用冒号分隔(windows下使用分号)。比如:-Djava.ext.dirs=directoryA:directoryB。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java -djava.ext.dirs和--class-path是两个Java的命令行选项,都用于指定Java虚拟机运行时查找类文件的路径。 Java的类库是由许多Java类文件组成的,这些类文件需要被Java虚拟机加载并执行。当我们编写Java程序时,我们需要通过某种方式告知Java虚拟机去哪里查找这些类文件。 -djava.ext.dirs选项用于指定Java虚拟机搜索Java扩展(Java Extension)类库的路径。Java扩展类库是指Java虚拟机内置的一些功能库,比如Java Database Connectivity(JDBC)类库,Java Naming and Directory Interface(JNDI)类库等。Java扩展类库通常存放在JRE的ext文件夹中,但是有时候我们可能需要自己定义一些Java扩展类库,那么就需要使用-djava.ext.dirs选项来告知Java虚拟机去哪里查找这些类文件。 --class-path选项用于指定Java虚拟机搜索Java应用程序类库的路径。Java应用程序类库是指我们编写的Java程序所依赖的一些类库,比如在编写Spring框架的应用程序时需要依赖Spring框架的类库。在编写Java应用程序时,我们需要告知Java虚拟机去哪里查找这些类库,那么就需要使用--class-path选项来指定Java应用程序类库的路径。 综上所述,Java -djava.ext.dirs和--class-path选项都用于指定Java虚拟机运行时查找类文件的路径,但是-djava.ext.dirs选项用于指定Java扩展类库的路径,而--class-path选项用于指定Java应用程序类库的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值