原文地址: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. Swoole 中使用 HTTP 异步服务器、HTTP 协程服务器

    HTTP 异步风格服务器 # http_server.php $http = new Swoole\Http\Server("0.0.0.0", 9501); // 设置服务器运行 ...

  2. 分享一款开源堡垒机-jumpserver

    本文主文章地址为:https://blog.csdn.net/KH_FC JumpServer是由FIT2CLOUD(飞致远)公司旗下一款开源的堡垒机,这款也是全球首款开源的堡垒机,使用 GNU GP ...

  3. 龙芯发布.NET 6.0.100开发者试用版

    龙芯在龙芯开源社区发布了LoongArch64-.NET-SDK-6.0.100开发者试用版 新闻 ,龙芯.NET基于上游社区 版本 适配支持龙芯平台架构. 目前支持LoongArch64架构和MIP ...

  4. centos7-collabora-office(在线文档编辑)

    1.wget https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7/repodata/repomd.xml.key &a ...

  5. sql优化--尽可能少用like

    1.前言 like非常消耗性能,当搜索 like '%%' 的时候,仍然会对比全表信息后查找相关的数据, 2.如何优化? 使用动态标签 <if test="nickName != '% ...

  6. 快速搭建Hadoop-Hive-Zoopkeeper-Sqoop环境进入Sqoop学习环境

    原文链接: https://www.toutiao.com/i6771763211927552523/ CDH简单了解 CDH: C:cloudera(公司) D:distribute H:Hadoo ...

  7. JSP页面实际上就是Servlet

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513069824690618883/ 前面一直提到了Servlet的内容,也是我们平时理解的后台,这次说一下前台的 ...

  8. JavaWeb中Session会话管理,理解Http无状态处理机制

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512955067434271246/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...

  9. Servlet简单实现开发部署过程

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512008683445027331/ 主要是从下面三个步骤实现我们的预期: (1)构建开发环境: (2)开发Ser ...

  10. 基于springboot的定时任务实现(非分布式)

    1. 核心注解 在springboot项目中我们可以很方便地使用spring自己的注解@Scheduled和@EnableScheduling配合来实现便捷开发定时任务. @EnableSchedul ...