快速业务通道

关于JAR您不知道的5件事:Java Archive不仅仅是一堆类 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-17
arget>

现在用户在执行 JAR 文件时需要做的就是通过 java -jar outapp.jar 在命令行上指定其文件名。就 GUI shell 来说,双击 JAR 文件即可。

2. JAR 可以包括依赖关系信息

似乎 Hello 实用工具已经展开,改变实现的需求已经出现。Spring 或 Guice 这类依赖项注入(DI)容器可以为我们处理许多细节,但是仍然有点小问题:修改代码使其含有 DI 容器的用法可能导致清单 4 所示的结果,如:

清单 4. Hello、Spring world!

package com.tedneward.jars; import org.springframework.context.*; import org.springframework.context.support.*; public class Hello  {    public static void main(String[] args)    {      ApplicationContext appContext =        new FileSystemXmlApplicationContext("./app.xml");      ISpeak speaker = (ISpeak) appContext.getBean("speaker");      System.out.println(speaker.sayHello());    } }

由于启动程序的 -jar 选项将覆盖 -classpath 命令行选项中的所有内容,因此运行这些代码时,Spring 必须是在 CLASSPATH 和 环境变量中。幸运的是,JAR 允许在清单文件中出现其他的 JAR 依赖项声明,这使得无需声明就可以隐式创建 CLASSPATH,如清单 5 所示:

清单 5. Hello、Spring CLASSPATH!

<target name="jar" depends="build">      <jar destfile="outapp.jar" basedir="classes">        <manifest>          <attribute name="Main-Class" value="com.tedneward.jars.Hello" />          <attribute name="Class-Path"            value="./lib/org.springframework.context-3.0.1.RELEASE-A.jar             ./lib/org.springframework.core-3.0.1.RELEASE-A.jar             ./lib/org.springframework.asm-3.0.1.RELEASE-A.jar             ./lib/org.springframework.beans-3.0.1.RELEASE-A.jar             ./lib/org.springframework.expression-3.0.1.RELEASE-A.jar             ./lib/commons-logging-1.0.4.jar" />        </manifest>      </jar>    </target>

注意 Class-Path 属性包含一个与应用程序所依赖的 JAR 文件相关的引用。您可以将它写成一个绝对引用或者完全没有前缀。这种情况下,我们假设 JAR 文件同应用程序 JAR 在同一个目录下。

不幸的是,value 属性和 Ant Class-Path 属性必须出现在同一行,因为 JAR 清单文件不能处理多个 Class-Path 属性。因此,所有这些依赖项在清单文件中必须出现在一行。当然,这很难看,但为了使 java -jar outapp.jar 可用,还是值得的!

关于JAR您不知道的5件事:Java Archive不仅仅是一堆类(3)

时间:2012-02-26 IBM Ted Neward

3. JAR 可以被隐式引用

如果有几个不同的命令行实用工具(或其他的应用程序)在使用 Spring 框架,可能更容易将 Spring JAR 文件放在公共位置,使所有实用工具能够引用。这样就避免了文件系统中到处都有 JAR 副本。Java 运行时 JAR 的公共位置,众所周知是 “扩展目录” ,默认位于 lib/ext 子目录,在 JRE 的安装位置之下。

JRE 是一个可定制的位置,但是在一个给定的 Java 环境中很少定制,以至于可以完全假设 lib/ext 是存储 JAR 的一个安全地方,以及它们将隐式地用于 Java 环境的 CLASSPATH 上。

4. Java 6 允许类路径通配符

为了避免庞

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号