通過ANT生成MANIFEST.MF中的Class-Path屬性


原文地址:http://reason2003.iteye.com/blog/1627353

之前做一個項目,主程序打包成一個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" />

 

  第二步,創建主程序的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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM