`
reason2003
  • 浏览: 91474 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

通过ANT生成MANIFEST.MF中的Class-Path属性

 
阅读更多

   之前做一个项目,主程序打包成一个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 

 

分享到:
评论

相关推荐

    详解MANIFEST.MF文件

    本文将详细介绍MANIFEST.MF文件中的各个关键字段及其作用,并通过示例来帮助读者更好地理解。 #### MANIFEST.MF 文件结构 MANIFEST.MF文件通常位于JAR文件的`META-INF`目录下,该文件由多行键值对组成,每行以`键:...

    生成JAR包及包的运行.doc

    - 在MANIFEST.MF中指定`Class-Path`,然后直接使用`java -jar`: ```bash Manifest-Version: 1.0 Class-Path: a.jar b.jar c.jar Main-Class: com.test.Test ``` 7. **Ant工具**: - Ant是Apache项目提供的...

    JAVA打包成可运行的JAR程序

    在这个过程中,需要注意几个重要的步骤,包括将依赖的 lib 包和配置文件正确地配置,生成 Class-Path 信息,并将其保存到 MANIFEST.MF 文件中。最后,将生成的 JAR 文件和配置文件、LIB 包里的引用文件放到同一...

    java打包jar.pdf

    然而,为了更有效地管理和运行JAR文件,我们需要自定义MANIFEST.MF文件,特别是添加`Main-Class`属性,这指定了JAR文件中的主类,使得通过`java -jar`命令就能直接启动应用程序。 创建和编辑MANIFEST.MF文件可以...

    9JavaJAR打包技术[收集].pdf

    在实际应用中,开发者经常使用构建工具(如Ant、Maven或Gradle)自动化JAR的打包过程,这些工具提供了更高级的配置和控制,可以自动生成`MANIFEST.MF`,添加依赖库,甚至创建可执行的JAR(包含启动脚本)。...

    java的打包与发布

    - `myapplicationlib.jar`的Manifest文件不包含`Main-Class`属性,但有`Class-Path`属性。 - `myappconsole.jar`的Manifest文件则包含`Main-Class`属性,指向具体的主类。 通过这种方式,不同的模块可以共存且互不...

    java源程序打包解惑1

    `Main-Class` 属性是运行 JAR 文件的关键,它指定了 JAR 文件中的主类,即程序的入口点。其他属性则提供了 JAR 文件的元信息,如创建工具、版本等。`Class-Path` 属性用于指定运行 JAR 文件时需要的外部库,这样 JAR...

    Eclipse中web-inf和meta-inf文件夹的信息

    `META-INF` 文件夹是 Java 应用程序中的一个重要组成部分,它主要用于存放与应用程序相关的元数据信息,例如清单文件(`MANIFEST.MF`)等。在 Eclipse 开发环境中,对于每一个打包成 JAR 的应用程序来说,`META-INF`...

    JAVA打包成应用软件的方法

    - 在打包过程中,确保所有的依赖库都被正确地包含在`Class-Path`中,否则程序可能因为找不到依赖而无法运行。 - 对于使用SWT的项目,还需要考虑本地化文件,例如`swt-win32-3063.dll`,确保将其复制到运行目录。 - ...

    将多个jar包合并为一个jar包

    - **MANIFEST.MF**:合并后的JAR需要一个包含所有依赖的Class-Path,这可以通过修改或合并原始MANIFEST.MF文件实现。 - **运行时问题**:合并后的JAR可能需要特殊处理才能正常运行,比如使用支持嵌入式JAR的运行环境...

    制作可执行jar文件【3中方法】

    3. 使用构建工具(如Ant的`jar`任务或Maven的`jar-plugin`)生成JAR文件,这些工具通常可以自动处理依赖项和`MANIFEST.MF`的生成。 4. 通过构建脚本或手动操作,确保所有必要的库和资源都被包含在JAR文件中,或者以...

    ant 将依赖的jar包和classes文件一起打成可执行jar

    7. **&lt;manifest&gt;元素**:在元素内,用于定义MANIFEST.MF的内容,包括Main-Class属性,告诉JAR哪个类应作为启动点。 8. **元素**:用于选择一组文件或目录,这些文件会被添加到JAR中,可以用来包含依赖的jar包和编译...

    jar打包,jar打包

    2. **使用`Class-Path`属性引用其他JAR文件**:在其中一个JAR文件的Manifest文件中使用`Class-Path`属性来声明对其他JAR文件的依赖。 3. **通过外部脚本调用不同的主类**:编写一个批处理文件或Shell脚本来根据需要...

    Java程序打包成Jar的文档说明

    一种常见的方式是使用`Class-Path`属性在`MANIFEST.MF`中列出外部库的位置,或者使用工具如Apache Ant、Maven或Gradle进行更复杂的打包配置,它们可以自动处理依赖并生成可执行的JAR。 总的来说,Eclipse提供了一个...

    Eclipse插件打包Jar文件fatjar(支持eclipse4.4及以上版本).zip

    6. **生成MANIFEST.MF**:在"JAR manifest"选项卡中,确保有正确的`Main-Class`和`Class-Path`条目。对于Eclipse插件,`Main-Class`可能是`org.eclipse.ui.internal.Workbench`,`Class-Path`则应包含Eclipse运行时...

    ant1.9资源

    我们设置了名为name和age的两个属性,这两个属性设置后,读者在下文中可以通过${name}和${age}分别取得这两个属性的值。 三. Ant的常用任务 在Ant工具中每一个任务封装了具体要执行的功能,是Ant工具的基本执行...

    新版Android开发教程.rar

    o Apache Ant 1.6.5 or later for Linux and Mac, 1.7 or later for Windows o Not Not Not Not compatible with Gnu Compiler for Java (gcj) Note: Note: Note: Note: If JDK is already installed on your ...

    教你如何打jar包讲解及例子

    如果你的JAR包依赖其他库,需要在manifest文件中指定`Class-Path`属性,或者使用工具如`one-jar`或`FatJar`来包含依赖。 **四、JAR文件的高级用法** 1. **使用Ant或Maven**:对于大型项目,可以使用构建工具如Ant...

    如何成功打jar 包以及运行

    - 将Ant的`bin`目录添加到系统的PATH环境变量中,以便在命令行中直接调用`ant`命令。 2. **理解Ant的build.xml**: - `build.xml`文件是Ant的构建配置文件,其中定义了各种任务和目标。 - 通常,`build.xml`包含...

    ant脚本,打可运行的jar包,并导出第三方jar包到指定目录

    在Java开发过程中,打包和部署是一项重要的任务,而Apache Ant是一个强大的工具,它允许开发者通过XML格式的构建文件(如本例中的`jar.xml`)来自动化这些过程。Ant是基于任务驱动的,这意味着你可以定义一系列的...

Global site tag (gtag.js) - Google Analytics