使用java扩展机制加载所有jar包-java开发java经验技巧

使用java扩展机制加载所有jar包-java开发java经验技巧

ID:27800073

大小:68.02 KB

页数:10页

时间:2018-12-06

使用java扩展机制加载所有jar包-java开发java经验技巧_第1页
使用java扩展机制加载所有jar包-java开发java经验技巧_第2页
使用java扩展机制加载所有jar包-java开发java经验技巧_第3页
使用java扩展机制加载所有jar包-java开发java经验技巧_第4页
使用java扩展机制加载所有jar包-java开发java经验技巧_第5页
资源描述:

《使用java扩展机制加载所有jar包-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、使用Java扩展机制加载所冇JAR包-编程开发技术使用Java扩展机制加载所有JAR包木文由ImportNew・孟冰川翻译自marxsoftwarc。欢迎加入翻译小组。转载请见文末要求。Java扩展机制在Java教程中被描述为一种“通过标准可扩展的方式來让Jeivei平台上所冇应用使用自定义API”。正如在理解扩展机制进行类加载屮描述的,“扩展框架充分使用了类加载代理机制”。这种机制会在rt.jar引导(boot)类加载之后,标准classpath的类加载之前,加载扩展类。扩展目录的工作机制在类的加载上与classpat

2、h有点类似。对Java应用程序來说,所有扩展口录下JAR文件包含的类都可以访问。然而,会有-•些关键的不同点。这些区别会在下面的文字中高亮显示。特征Classpath扩展机制(可选包)作用域典型的应用相关•-classpath/-cp•java.class.path•可执行JARManifest的Class-Path主机上所有可能的JRE•CLASSPATH环境变量所有运行在特定JRE上的JVM•java.ext.dirs各种主机上的JRE•Solaris:/usr/jdk/packages/1ib/ext•Linux:

3、/usr/java/packages/lib/ext•Windows:%SystcmRoot%SunJavalibcxt如何指定•jar文件•明确的通过名字來指定(包括・jar)•使用通配符來匹配所有的.j竝扩展.classFiles•指定冃录下的.class文件所有在指定目录卞的JAR文件都会被加载(即使扩展名不是.jar或者没有扩展名)类加载顺序引导和扩展类加载之后引导类加载之后,classpath上的类加载之前一个最重要且值得重视的问题是,扩展机制会找出所有jar格式的文件,即使文件后缀名不是.jar。这意

4、味着,改变classpath中的jar文件后缀名以此逃过通配符的筛选,这种方法在扩展目录中行不通。我会用一些简单的例子来展示一些上而提到的区别。接下来的两段代码是一个简单的HelloWorld类和一个main应用程序中的Main类。Main通过调用main方法来使用HelloWorld类。HelloWorld・javapublicclassHelloWorld{©OverridepublicStringtoStringO{return"Hello,World!;}}Main・javaimportstaticjava.la

5、ng.System.out;publicclassMain{publicstaticvoidmain(finalString[]arguments){out.println(newHelloWorld());}为了展示classpath和扩展机制的主要区别,我将会把编译过的HelloWorld.class文件归档到一个jar包里,命名为HelloWorld.jar0并把它放在一个跟编译过的Main,class不同的口录下。为了展示传统的classpath的使用,我把HelloWorld.jar放在一个叫做C:hello

6、的目录下并口会用通配符访问JAR来给Main使用。下面的两个截图对此进行了展示。以上两个截图说明,尽管我删掉了当前目录下的HelloWorld.class,Java主应用仍然能加载它。这是因为Javalauncher被告知(通过-classpath这个可选参数)去C:hello目录下寻找。使用扩展机制,不需要把类放到当前目录或者指定到classpathF就可以加载。接下來的截图展示了这一点。上面的截图说明,当某个类是在扩展戸录下的某个JAR里,Javalauncher其至不需要把HelloWorld.class放到同一

7、个目录卜或者在classpath中指定。这常常被用来说明使用扩展机制的优点。因为所冇在这个JRE(或者可能是主机上的所冇应用)上运行的程序都可以不用在classpath上指定就能看到扩展目录下的类。使用传统classpath方式指导应用去加载JAR中的类,包含.class文件的JAR文件必须以.jar结尾。接下來的截图展示了当把在classpath引用的目录下的HelleWorld,jar重命名为HclloWorld.backupZ后所发生的事情。上面这张图展示了当classpath引用的目录下JAR文件没有以.jar结

8、尾时发生的NoClassDefFoundError异常。可能有点令人惊讶,扩展机制不是这样工作的。所冇在扩展目录下的JAR文件,不管后缀名是什么甚至没冇后缀名都会被加载。接下來的截图展示了这一点。这张图展示了,给在扩展目录中的JAR文件重命名为没有后缀的文件并不妨碍类加载器加载JAR文件中的类。换句话说,类加载机制是

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。