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

标签: djava ext dirs | 发表时间:2016-12-07 10:02 | 作者:windows9834
出处:http://windows9834.blog.163.com
大家在linux环境下使用命令行执行java程序时,经常要使用到大量外部的jar包或class文件,一般我们有哪些方式可以用呢?
-classpath,命令格式:# java -classpath <目录或zip/jar文件的类搜索路径>,使用";"分隔
-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。

相关 [djava ext dirs] 推荐:

Ext文件系统

- Haides - 博客园-首页原创精华区
  虽然从Ext2到Ext4,找数据的方式发生了变化,但是,磁盘的布局还是非常相似的. 其实这个东西也不需要变化,因为现在也没什么特别巧妙的方式,而且磁盘的吞吐量、效率的瓶颈也不在这里. 当然,这里排除那些根据自身文件特点设计的数据库,毕竟还是为了支持通用文件.   Boot在第一个块,放的应该是引导程序,超级块就放在了第二个块上,如果不是可以在mount的时候通过参数sb来设置.

[Ext JS 4] MVC 应用程序框架

- - CSDN博客Web前端推荐文章
大型客户端应用程序总是很难编写,很难组织和很难维护. 随着功能的增加和更多的开发人员加入项目,对项目的控制也越来越困难了. Ext JS 4 提供了一个新的应用程序框架帮助组织代码. 模型 - 一组栏位和数据的集合. Model (在Ext JS 3中使用Record class). 视图 - 组件类型, grids,trees 和 panels 都是属于试图.

(转)使用mysqladmin ext了解MySQL运行状态

- - jackyrong
mysqladmin是MySQL一个重要的客户端,最常见的是使用它来关闭数据库,除此,该命令还可以了解MySQL运行状态、进程信息、进程杀死等. 本文介绍一下如何使用mysqladmin extended-status(因为没有"歧义",所以可以使用ext代替)了解MySQL的运行状态. 使用mysqladmin extended-status命令可以获得所有MySQL性能指标,即show global status的输出,不过,因为多数这些指标都是累计值,如果想了解当前的状态,则需要进行一次差值计算,这就是mysqladmin extended-status的一个额外功能,非常实用.