`
he91_com
  • 浏览: 375906 次
文章分类
社区版块
存档分类
最新评论

Java工程打包及MANIFEST.MF文件编写的注意事项

 
阅读更多
<style type="text/css"> <!-- p {text-indent:2em} --> </style>

命令行的不多说了,在有IDE的情况下,就不搬命令行了;本文涉及到的打包操作特指用Eclipse将普通Java工程打包成可运行的jar包,不涉及web项目的war包。

在Eclipse左侧的工程列表中,右键单击需要打包的程序所在的工程,点export之后选导出类型。如果需要一个可以单独运行的jar包,省事的方法是妥妥的选择打一个可运行的jar包“Runnable JAR file”。如此一来,就可以把程序运行所依赖的类、第三方jar包等资源整合到一个单独的jar包中,使用“java -jar xxx.jar”命令等方式可以直接执行程序。注意这种方式需要选择工程中的一个运行配置(Launch configuration),只要之前用Eclipse执行过该程序即可自动生成该配置。

值得注意的是,一个可运行程序依赖的jar包可能会有很多,如果每个程序都把依赖的jar包整合在自己的jar包中,显然是对存储空间和运行效率的浪费。我们可以选择将程序打包成普通jar包“JAR file”,选择要打包的资源时,只选择程序源文件等必要的资源,而不选择包含第三方jar包的文件夹。注意选择程序的入口类(主类),当然也可以手动修改清单文件MANIFEST.MF来指定主类。

将多个程序可能依赖的jar包集中放置在一个单独的文件夹中,然后修改jar包中“META-INF”目录下的“MANIFEST.MF”清单文件。该文件的“Main-Class”属性指定了程序的主类,“Class-Path”属性则指定了运行主类所依赖的外部类的路径。将类路径配置在清单文件中的好处是,运行jar包时可以省去一长串的classpath参数。下面给出清单文件的一个示例:

Manifest-Version: 1.0
Main-Class: cn.com.taiji.backGroundServer.server.TransmissionServer.Tr
 ansmissionServer
Class-Path: lib/activemq-all-5.6.0.jar lib/activemq-pool-5.6.0.jar lib
 /ojdbc6.jar lib/com.ibm.mq.commonservices.jar lib/com.ibm.mq.defaultc
 onfig.jar lib/com.ibm.mq.fta.jar lib/com.ibm.mq.headers.jar lib/com.i
 bm.mq.jar lib/com.ibm.mq.jmqi.jar lib/com.ibm.mq.jms.Nojndi.jar lib/c
 om.ibm.mq.pcf.jar lib/com.ibm.mq.postcard.jar lib/com.ibm.mq.soap.jar
  lib/com.ibm.mq.tools.ras.jar ./lib/com.ibm.mqetclient.jar lib/com.ib
 m.mqjms.jar lib/commons-collections-3.2.1 lib/commons-dbcp-1.4.jar

注意这个文件的编写需要遵循严格的规范

  1. 第一行不能空,行与行之间不能有空行,每一行的最后一个字符不能是空格
  2. 最后一行一定是空行
  3. 每个属性的名称和值之间(冒号后面)一定要有空格
  4. 文件的每一行都不能超过72个字节(一般是70个ASCII字母加上回车换行符);如果72个字节不够用,则另起一行并以空格开头:以空格开头的行都被视为前一行的续行。

具体详细的规范请参见Java的官方文档,注意事项见“Notes on Manifest and Signature Files”一节。

还需要注意的是,Class-Path属性指定的类或jar包是本地的文件,不可以是远程访问的类或者JAR包文件中的JAR包,即不能是jarin jar;当然也就不能是本jar包中包含的jar包。要实现对jar in jar的引用,需要自定义相关代码来读取它们。上面提到的RunnableJAR file之所以能够运行,就是因为Eclipse为我们提供了jarinjarloader,来帮助我们读取jar in jar。





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics