通过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" />
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

时间: 2024-10-18 20:04:45

通过ANT生成MANIFEST.MF中的Class-Path属性的相关文章

JAR包结构,META-INF/MANIFEST.MF文件详细说明[全部属性][打包][JDK]

转载请注:[https://www.cnblogs.com/applerosa/p/9736729.html] 常见的属性 jar文件的用途 压缩的和未压缩的 jar工具 可执行的JAR 1.创建可执行JAR 2.启动可执行JAR 3.扩展打包 4.JAR文件中的安全性.. 5.数字签名. 6.jarsigner工具. 7.JAR索引 JAR(Java Archive File),Java 档案文件.通常jar 为压缩文件, 与 ZIP/RAR 压缩文件 一样的概念, 区别在于 jar 文件中存

maven-bundle-plugin 2.4.0以下版本导出META-INF中的内容到MANIFEST.MF中

今天终于把maven-bundle-plugin不能导出META-INF中的内容到Export-Package中的问题解决了,因为产品用的是OSGI框架,用到的第三方JAR包需要加载META-INF/XX/XX.xml这个内容,但在运行的时候getResource返回null. 经一番调查发现META-XX.XX这个包名没有导出,手动去修改MANIFEST.MF可以解决问题.但产品的源码中这个依赖是以maven-bundle-plugin进行打包的,在添加Export-Package:META-

关于entityframework 自动生成实体类中加验证的属性重新生成后属性被覆盖解决办法

1.手动创建一个部分类 (你可以手动创建 partial class, 内容为空) [MetadataType(typeof(AppleMetadata))] public partial class Apple { } 2.创建一个元数据类 ( AppleMetadata class, 在其中添加你需要的验证, field 的名字与 原来的Apple class 要一致) 3.修改ef的模板,是生成的实体类带有MetadataType属性

JAR包中的MANIFEST.MF文件详解以及编写规范

参考百度百科的解释如下: MANIFEST.MF:这个 manifest 文件定义了与扩展和包相关的数据.单词“manifest”的意思是“显示” 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内容,先来看struts.jar中包含的MANIFEST.MF文件内容: Manifest-Version: 1.0 Created-

MANIFEST.MF 文件内容完全详解(转)

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内 容,先来看struts.jar中包含的MANIFEST.MF文件内容: Manifest-Version: 1.0Created-By: Apache Ant 1.5.1Extension-Name: Struts FrameworkSpecification-Title:

jar MANIFEST.MF 汇总

: Manifest-Version: 1.0Created-By: Apache Ant 1.5.1Extension-Name: Struts FrameworkSpecification-Title: Struts FrameworkSpecification-Vendor: Apache Software FoundationSpecification-Version: 1.1Implementation-Title: Struts FrameworkImplementation-Ven

Jar文件 META-INF/MANIFEST.MF文件详解

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内 容,先来看struts.jar中包含的MANIFEST.MF文件内容: Manifest-Version: 1.0Created-By: Apache Ant 1.5.1Extension-Name: Struts FrameworkSpecification-Title:

MANIFEST.MF文件全面解析

(一)简介 当我们用Jar命令打完包后,会在根目录下面创建META-INF目录,该目录下面会有一些对该Jar包信息的描述,其中肯定会有一个MANIFEST.MF文件,该文件包含了该Jar包的版本.创建人和类搜索路径等信息,当然如果是可执行Jar包,会包含Main-Class属性,表明Main方法入口.下面是httpclient.jar中的MANIFEST.MF内容: Manifest-Version: 1.0 Implementation-Title: HttpComponents Apache

java项目中META-INF的作用中MANIFEST.MF的作用(转载)

发布Java应用程序时你会感到困难?好在Java提供了一系列打包和发布工具,可以显著的简化发布过程 该文章提供了打包Java code的几种方法,我们将会探讨Java manifest 文件,给出用于管理JAR文件所依赖文件.估计跨平台发布所需的CLasspath的合适方法.我也会解释如何使用manifest包版本特性来确认包的兼容性... 什么是JAR文件? 在开发过程中,我们可以直接使用Java class文件来运行程序,但这并不是一个好方式,好在Java 提供了 JAR(Java Arch