通过ANT生成MANIFEST.MF中的Class-Path属性

   之前做一个项目,主程序打包成一个jar文件,因为用到了很多第三方的lib包,所以直接通过java命令运行jar比较烦琐,通过研究jar中的MANIFEST.MF文件,我们发现其中一个Class-Path属性,但这个属性值比较奇怪,不支持正则。所以要配置使用到的第三方包,必须明确相对路径和包名。如果手写MANIFEST.MF,工作量会比较大。幸好ant可以帮我们自动生成Class-Path属性。具体的请看下面的ant的执行脚本

      第一步,定义一些属性

      1 <!-- name of the output .jar file -->

2  < property  name ="jar.name"  value ="ourjarfile.jar"   />
3  <!--  base directory for distribution target  -->
4  < property  name ="dist.home"  value ="dist"   />
5  <!--  base directory for compilation targets  -->
6  < property  name ="build.home"  value ="target"   />
7  <!--  The base directory for all libraries (jar) files  -->
8  < property  name ="lib.home"  value ="lib"   />
9 

 

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

 1  < 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 >
44 

 

你可能感兴趣的:(Manifest)