原文地址: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属性的更多相关文章

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

    转载请注:[https://www.cnblogs.com/applerosa/p/9736729.html] 常见的属性 jar文件的用途 压缩的和未压缩的 jar工具 可执行的JAR 1.创建可执 ...

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

    今天终于把maven-bundle-plugin不能导出META-INF中的内容到Export-Package中的问题解决了,因为用到的第三方JAR包需要加载META-INF/XX/XX.xml这个内 ...

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

    1.手动创建一个部分类 (你可以手动创建 partial class, 内容为空) [MetadataType(typeof(AppleMetadata))] public partial class ...

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

    参考百度百科的解释如下: http://baike.baidu.com/item/MANIFEST.MF MANIFEST.MF:这个 manifest 文件定义了与扩展和包相关的数据.单词“mani ...

  5. jar MANIFEST.MF 汇总

    : Manifest-Version: 1.0Created-By: Apache Ant 1.5.1Extension-Name: Struts FrameworkSpecification-Tit ...

  6. MANIFEST.MF详解(转)

    转载自http://blog.csdn.net/zhifeiyu2008/article/details/8829637 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, ...

  7. 关于MANIFEST.MF的理解

    打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息. 在Java平台中, M ...

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

    打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANI ...

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

    打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANI ...

随机推荐

  1. 新环境chart包helmlint校验

    在iot目录内可以执行helm lint iot-api 去校验

  2. 初识python 之 爬虫:使用正则表达式爬取“糗事百科 - 文字版”网页数据

    初识python 之 爬虫:使用正则表达式爬取"古诗文"网页数据 的兄弟篇. 详细代码如下: #!/user/bin env python # author:Simple-Sir ...

  3. win10系统微软账号登陆错误报错误码0x80190001

    https://blog.csdn.net/u012878537/article/details/91353248 使用onenote同步的时候报出这样的错误. 知道问题出在了哪里,就容易解决了不是. ...

  4. Go数组遍历与排序

    遍历数组 Go遍历数组有两种方式 1.按照数组下标进行遍历 2.用range遍历 package main import ( "fmt" ) func main() { // 声明 ...

  5. linux 设置root 密码

    指令意思: sudo -i  是 切换到root权限 ,如果没有密码,则直接可以操作,有密码则会要求输入密码 sudo passwd root  是修改密码指令 ,回车后 提示输入新密码 新密码需要输 ...

  6. vue2.0与vue3.0项目创建

    脚手架安装与卸载 安装 npm install -g vue-cli //or npm install -g @vue/cli 卸载 npm uninstall -g vue-cli //or npm ...

  7. elasticsearch在linux上的安装,Centos7.X elasticsearch 7.6.2安装

    本文环境:Elasticsearch7.6.2目前最先版本   centos7.X     JDK1.8 elasticsearch介绍 官网:https://www.elastic.co/cn/pr ...

  8. 【Java常用类】两个Date类

    两个Date类 java.util.Date类 两个构造器的使用 构造器一:Date():创建一个对应当前时间的Date对象 构造器二:创建指定毫秒数的Date对象 两个方法的使用 toString( ...

  9. 嫌Excel VBA执行速度慢,这些建议你一定要看

    Excel是办公利器,这无需多言.尤其在办公室,Excel用的熟练与否,会的Excel知识点多不多,很大程度上决定了你工作是否高效,能否按时打卡下班.可我们也时常听到这样的吐槽:Excel好是好,可就 ...

  10. Android官方文档翻译 十七 4.1Starting an Activity

    Starting an Activity 开启一个Activity This lesson teaches you to 这节课教给你 Understand the Lifecycle Callbac ...