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

21 篇文章 0 订阅


打包成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



转载地址:http://japi.iteye.com/blog/790809

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值