通过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
通过ANT生成MANIFEST.MF中的Class-Path属性的更多相关文章
- JAR包结构,META-INF/MANIFEST.MF文件详细说明[全部属性][打包][JDK]
转载请注:[https://www.cnblogs.com/applerosa/p/9736729.html] 常见的属性 jar文件的用途 压缩的和未压缩的 jar工具 可执行的JAR 1.创建可执 ...
- maven-bundle-plugin 2.4.0以下版本导出META-INF中的内容到MANIFEST.MF中
今天终于把maven-bundle-plugin不能导出META-INF中的内容到Export-Package中的问题解决了,因为用到的第三方JAR包需要加载META-INF/XX/XX.xml这个内 ...
- 关于entityframework 自动生成实体类中加验证的属性重新生成后属性被覆盖解决办法
1.手动创建一个部分类 (你可以手动创建 partial class, 内容为空) [MetadataType(typeof(AppleMetadata))] public partial class ...
- JAR包中的MANIFEST.MF文件详解以及编写规范
参考百度百科的解释如下: http://baike.baidu.com/item/MANIFEST.MF MANIFEST.MF:这个 manifest 文件定义了与扩展和包相关的数据.单词“mani ...
- jar MANIFEST.MF 汇总
: Manifest-Version: 1.0Created-By: Apache Ant 1.5.1Extension-Name: Struts FrameworkSpecification-Tit ...
- MANIFEST.MF详解(转)
转载自http://blog.csdn.net/zhifeiyu2008/article/details/8829637 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, ...
- 关于MANIFEST.MF的理解
打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息. 在Java平台中, M ...
- Jar文件 META-INF/MANIFEST.MF文件详解
打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANI ...
- MANIFEST.MF 文件内容完全详解(转)
打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANI ...
随机推荐
- C# double类型精度丢失问题
我们先看一段代码,可以在控制台程序中执行看看结果 { double d = 500; double d1 = 233.84; double d2 = d - d1; //d2=266.15999999 ...
- JMeter_请求参数
在做接口测试时,发送请求的参数有两种格式,一种是Parameters,一种是JSON 一.Jmeter传参 JMeter 传Parameters格式的参数 JMeter 传JSON格式的参数 二.区分 ...
- wget 工具使用
wget http://xxxx 下载文件到当前文件夹 wget -V 显示wget的版本信息并退出 wget -v 打印详细信息 默认 wget -nv 关闭详细输出,但不进入安静模式 wget - ...
- synchronized锁升级详细过程
java对象头由3部分组成: 1.Mark Word 2.指向类对象(对象的class对象)的指针 3.数组长度(数组类型才有) 重点是 Mark Word结构,下面以32位HotSpot为例: 一. ...
- 《Go组件设计与实现》-netpoll的总结
主要针对字节跳动的netpoll网络库进行总结.netpoll网络库相比于go本身的net标准库更适合高并发场景. 基础知识 netpoll与go.net库一样使用epoll这种IO多路复用机制处理网 ...
- element ui table 表格排序
实现elementui表格的排序 1:给table加上sort-change,给table每一项加上sortable和column-key,排序是根据column-key来进行排序的 <el-t ...
- Javascript中数组的定义和常见使用方法
一.定义数组 1.定义数组 var arry=[1,2,'小名',false] //var 数组名=[值1,值2,...] 2.设置数组长度 arry.length=10 //数组长度设置为10 二. ...
- JQuery选择器的使用和分类
jQuery选择器 id选择器格式 $("#box") //获取标签里的id是box的标签 类选择器格式 $(".a") //获取标签里的类名是a的标签 标签选 ...
- 进程池与线程池基本使用、协程理论与实操、IO模型、前端、BS架构、HTTP协议与HTML前戏
昨日内容回顾 GIL全局解释器锁 1.在python解释器中 才有GIL的存在(只与解释器有关) 2.GIL本质上其实也是一把互斥锁(并发变串行 牺牲效率保证安全) 3.GIL的存在 是由于Cpyth ...
- thanos receiver压测结果分享
压测环境 k8s容器环境 单核 32GB内存 thanos版本:v0.22.0 客户端发送32271959条数据,100个并发:同样的数据文件发送了两遍,取第二遍的性能数据 在thanos recei ...