打包成jar有很多方式,直接命令,使用eclipsehttp://www.java1995.cn/blog/item/448
.
但这些方式在使用到第三方包的时候
都不是很方便,尤其对于MANIFEST.MF格式难以手写,经常出错,相当不方便
此时可以使用ant来完成这些工作
写道
以下是需要注意的各个要点:
1. Manifest-Version、Main-Class和Class-Path后面跟着一个英文的冒号,冒号后面必须跟着一个空格,然后才是版本号、类和ClassPath。
2. Class-Path中的各项应使用空格分隔,不是逗号或分号。
3. Class-Path中如果有很多项,写成一行打包的时候会报错line too long,这时需要把Class-Path分多行写。注意:从第二行开始,必须以两个空格开头,三个以上我没试过,不过不用空格开头和一个空格开头都是不行的,我已经试过了。
4. Class-Path写完之后最后一定要有一个空行。
5. jar包内有些配置文件想放在jar包外面,比如文件config.properties:如果这个文件是以路径方式载入的,比如new file("./config/config.properties"),那么将config.properties放在jar包相同目录下的 config目录下即可,也就是说“./”路径等价于jar包所在目录;如果这个文件是以ClassPath下的文件这种方式载入的,比如在Spring 中载入classpath:config.properties,则在MF文件的配置文件的ClassPath中添加“./”,然后将这个配置文件与 jar包放在同一个目录即可,当然也可以在MF文件的配置文件的ClassPath中添加“./config/”,然后把配置文件都放在jar包相同目录下的config目录下。
第一步,定义一些属性
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
第三步,执行主程序,在控制台中输入 java -jar 主程序.jar -Xms128M
-Xmx256m.在这里我们就不用一一输入主程序引用的第三方包了,我们已经在主程序jar中的MANIFEST.MF文件中定义了Class-
Path属性,这里列出了所有的第三方包.
参考:http://www.java1995.cn/blog/item/449
ANT资料:
http://www.java1995.cn/java1995?pager.offset=0&pageNo=1&query=ant&type=article
分享到:
相关推荐
本文将详细介绍MANIFEST.MF文件中的各个关键字段及其作用,并通过示例来帮助读者更好地理解。 #### MANIFEST.MF 文件结构 MANIFEST.MF文件通常位于JAR文件的`META-INF`目录下,该文件由多行键值对组成,每行以`键:...
- 在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项目提供的...
在实际应用中,开发者经常使用构建工具(如Ant、Maven或Gradle)自动化JAR的打包过程,这些工具提供了更高级的配置和控制,可以自动生成`MANIFEST.MF`,添加依赖库,甚至创建可执行的JAR(包含启动脚本)。...
然而,为了更有效地管理和运行JAR文件,我们需要自定义MANIFEST.MF文件,特别是添加`Main-Class`属性,这指定了JAR文件中的主类,使得通过`java -jar`命令就能直接启动应用程序。 创建和编辑MANIFEST.MF文件可以...
为了生成可执行的 JAR 文件,需要正确地配置依赖的 lib 包和配置文件,生成 Class-Path 信息,并将其保存到 MANIFEST.MF 文件中。同时,需要正确地读取相对路径的配置文件信息,以便程序可以正确地执行。
2. **使用`Class-Path`属性引用其他JAR文件**:在其中一个JAR文件的Manifest文件中使用`Class-Path`属性来声明对其他JAR文件的依赖。 3. **通过外部脚本调用不同的主类**:编写一个批处理文件或Shell脚本来根据需要...
这种情况下,可以为每个模块创建单独的JAR文件,并在各自的Manifest文件中设置正确的`Main-Class`属性。例如: - `myapplicationlib.jar`的Manifest文件不包含`Main-Class`属性,但有`Class-Path`属性。 - `...
7. **<manifest>元素**:在<jar>元素内,用于定义MANIFEST.MF的内容,包括Main-Class属性,告诉JAR哪个类应作为启动点。 8. **元素**:用于选择一组文件或目录,这些文件会被添加到JAR中,可以用来包含依赖的jar包...
`Main-Class` 属性是运行 JAR 文件的关键,它指定了 JAR 文件中的主类,即程序的入口点。其他属性则提供了 JAR 文件的元信息,如创建工具、版本等。`Class-Path` 属性用于指定运行 JAR 文件时需要的外部库,这样 JAR...
6. **生成MANIFEST.MF**:在"JAR manifest"选项卡中,确保有正确的`Main-Class`和`Class-Path`条目。对于Eclipse插件,`Main-Class`可能是`org.eclipse.ui.internal.Workbench`,`Class-Path`则应包含Eclipse运行时...
- **MANIFEST.MF**:合并后的JAR需要一个包含所有依赖的Class-Path,这可以通过修改或合并原始MANIFEST.MF文件实现。 - **运行时问题**:合并后的JAR可能需要特殊处理才能正常运行,比如使用支持嵌入式JAR的运行环境...
一种常见的方式是使用`Class-Path`属性在`MANIFEST.MF`中列出外部库的位置,或者使用工具如Apache Ant、Maven或Gradle进行更复杂的打包配置,它们可以自动处理依赖并生成可执行的JAR。 总的来说,Eclipse提供了一个...
3. 使用构建工具(如Ant的`jar`任务或Maven的`jar-plugin`)生成JAR文件,这些工具通常可以自动处理依赖项和`MANIFEST.MF`的生成。 4. 通过构建脚本或手动操作,确保所有必要的库和资源都被包含在JAR文件中,或者以...
打包的关键在于创建并配置`MANIFEST.MF`文件,指定执行入口类和支持库的路径。此外,如果项目中使用了特定的库或本地化文件,如SWT组件,也需要一并打包。 #### 1.2 包装的具体操作步骤 以一个使用SWT/JFace的项目...
在Java开发过程中,打包和部署是一项重要的任务,而Apache Ant是一个强大的工具,它允许开发者通过XML格式的构建文件(如本例中的`jar.xml`)来自动化这些过程。Ant是基于任务驱动的,这意味着你可以定义一系列的...
- **定义**: `MANIFEST.MF` 文件存储了 JAR 包的基本属性信息,如版本号、构建工具等。 - **重要性**: 它是 JAR 文件的一部分,包含了运行该应用程序所必需的一些配置信息,比如主类名、依赖库路径等。 - **示例属性...
-- 打包 jar 文件 --> <target name="jar" depends="compile"> <jar destfile="${dist.dir}/sample.jar" basedir="${classes.dir}" manifest="manifest.mf"> <manifest> <attribute name="Main-Class" value=...
如果你的JAR包依赖其他库,需要在manifest文件中指定`Class-Path`属性,或者使用工具如`one-jar`或`FatJar`来包含依赖。 **四、JAR文件的高级用法** 1. **使用Ant或Maven**:对于大型项目,可以使用构建工具如Ant...
在Java开发过程中,将代码打包成JAR(Java Archive)文件是常见的操作,这有助于部署、分发和执行Java应用程序。本篇文章将详细介绍如何成功创建并运行JAR包,主要涉及使用Ant工具进行构建。 首先,我们需要理解JAR...