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

打包成jar有很多方式,直接命令,使用eclipse

但这些方式在使用到第三方包的时候都不是很方便,尤其对于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  -->

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  

    第三步,执行主程序,在控制台中输入 java -jar 主程序.jar -Xms128M -Xmx256m.在这里我们就不用一一输入主程序引用的第三方包了,我们已经在主程序jar中的MANIFEST.MF文件中定义了Class- Path属性,这里列出了所有的第三方包.

你可能感兴趣的:(ant,Build,Manifest,classpath,makefile)