您的位置:首页 > Web前端

通过ANT打包jar并生成MANIFEST.MF中的Class-Path属性

2012-10-17 09:31 489 查看
打包成jar有很多方式,直接命令,使用eclipsehttp://www.java1995.cn/blog/item/448 .

但这些方式在使用到第三方包的时候 都不是很方便,尤其对于MANIFEST.MF格式难以手写,经常出错,相当不方便

此时可以使用ant来完成这些工作

写道

以下是需要注意的各个要点:

1. Manifest-Version、Main-Class和Class-Path后面跟着一个英文的冒号,冒号后面必须跟着一个空格,然后才是版本号、类和ClassPath。

2. Class-Path中的各项应使用空格分隔,不是逗号或分号。

3. Class-Path中如果有很多项,写成一行打包的时候会报错line too long,这时需要把Class-Path分多行写。注意:从第二行开始,必须以两个空格开头,三个以上我没试过,不过不用空格开头和一个空格开头都是不行的,我已经试过了。

4. Class-Path写完之后最后一定要有一个空行。

5. jar包内有些配置文件想放在jar包外面,比如文件config.properties:如果这个文件是以路径方式载入的,比如new file("./config/config.properties"),那么将config.properties放在jar包相同目录下的 config目录下即可,也就是说“./”路径等价于jar包所在目录;如果这个文件是以ClassPath下的文件这种方式载入的,比如在Spring 中载入classpath:config.properties,则在MF文件的配置文件的ClassPath中添加“./”,然后将这个配置文件与
jar包放在同一个目录即可,当然也可以在MF文件的配置文件的ClassPath中添加“./config/”,然后把配置文件都放在jar包相同目录下的config目录下。

第一步,定义一些属性

1 <!-- name of the output .jar file -->
< property  name ="jar.name"  value ="ourjarfile.jar"   />
<!--  base directory for distribution target  -->
< property  name ="dist.home"  value ="dist"   />
<!--  base directory for compilation targets  -->
< property  name ="build.home"  value ="target"   />
<!--  The base directory for all libraries (jar) files  -->
< property  name ="lib.home"  value ="lib"   />


 第二步,创建主程序的jar文件,这里会创建Class-Path的属性,并生成相应的MANIFEST.MF

< target name ="jar" depends ="compile" description ="Create jar and MANIFEST.MF" >

2

3

4

5 <!-- create a property containing all .jar files, prefix lib/, and seperated with a space -->

6

7 < pathconvert property ="libs.project" pathsep =" " >

8

9 < mapper >

10

11 < chainedmapper >

12 <!-- remove absolute path -->

13 < flattenmapper />

14 <!-- add lib/ prefix -->

15 < globmapper from ="*" to ="lib/*" />

16 </ chainedmapper >

17 </ mapper >

18 < path >

19 <!-- lib.home contains all jar files, in several subdirectories -->

20 < fileset dir ="${lib.home}" >

21 < include name ="**/*.jar" />

22 </ fileset >

23 </ path >

24 </ pathconvert >

25 <!-- create the jar -->

26 < jar jarfile ="${build.home}/${jar.name}" basedir ="${build.home}/classes" >

27 <!-- define MANIFEST.MF -->

28 < manifest >

29 < attribute name ="Built-By" value ="${user.name}" />

30 < attribute name ="Main-Class" value ="my.path.to.the.main.Application" />

31 < section name ="common" >

32 < attribute name ="Specification-Title" value ="${component.name}" />

33 < attribute name ="Specification-Version" value ="${component.version}" />

34 < attribute name ="Specification-Vendor" value ="${component.vendor}" />

35 < attribute name ="Implementation-Title" value ="${component.name}" />

36 < attribute name ="Implementation-Version" value ="${component.version} ${TODAY}" />

37 < attribute name ="Implementation-Vendor" value ="${component.vendor}" />

38 </ section >

39 <!-- finally, use the magically generated libs path -->

40 < attribute name ="Class-Path" value ="${libs.project}" />

41 </ manifest >

42 </ jar >

43 </ target >

第三步,执行主程序,在控制台中输入 java -jar 主程序.jar -Xms128M -Xmx256m.在这里我们就不用一一输入主程序引用的第三方包了,我们已经在主程序jar中的MANIFEST.MF文件中定义了Class- Path属性,这里列出了所有的第三方包.
参考:http://www.java1995.cn/blog/item/449
ANT资料:

http://www.java1995.cn/java1995?pager.offset=0&pageNo=1&query=ant&type=article

转载地址:/article/4106615.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: