工作中发现的一个非常奇怪也很有趣事情,有关MANIFEST.MF文件中的分行和空格的格式要求,分享给大家。
对于通常的MANIFEST.MF文件,一般格式是:
Class
-
Path: lib
/
a.jar lib
/
b.jar lib
/
c.jar lib
/
d.jar lib
/
e.jar lib
/
f.jar
在一行之内将所有的jar包路径写上,空格分隔即可。
但是对于一些大型的项目,因为依赖包众多,比如大于30个,那么如果还写在一行内,就会出现一个长度惊人的行。程序运行倒不会有任何问题,但是对于版本控制就很不友好,如增加或者减少一个依赖包,这行就会被改写。以后compare不同版本时,只能知道这行被修改了确无法直接知道是做了什么修改,必须通过其他方式才能对比出来。
同样的问题发生在code merge时,如果两个分支都修改了这个文件,就必须通过手工来进行merge,而且要对照出来彼此到底改了什么,很困难而且容易出错。
因此一个改进就是将这个文件中的依赖按照一行一个依赖的方式重写,这样以后修改时只会修改改依赖所在的行,很容易就对比出来具体做了哪些感动,code merge时版本控制软件一般也很容易直接自动merge成功。
修改后的文件类似如下:
Class
-
Path: lib
/
a.jar
lib
/
b.jar
lib
/
c.jar
lib
/
d.jar
lib
/
e.jar
lib
/
f.jar
但是在实际操作时发生了意料之外的问题,会出现异常或者类无法找到,经检查发现问题出现在MANIFEST.MF的格式上,MANIFEST.MF对于分行和空格是有特殊要求的:
1. 每行的最后一个jar的名称后不容许有空格
即" lib/b.jar"在b.jar后必须回车结束本行,不能有空格,一个都不能
2. 每行的开头必须有不少于2个空格
即" lib/b.jar"在b.jar前必须有不下两个空格
以上两个条件有一个不满足都会出现问题,有点古怪。
分享到:
相关推荐
方法一是直接拷贝其他能运行的JAR文件中的MANIFEST.MF文件并进行修改。方法二是利用IDE工具,如Eclipse,在生成JAR文件时自动生 成MANIFEST.MF文件。 MANIFEST.MF文件的内容如下: Manifest-Version: 1.0 Main-...
- **MANIFEST.MF**:这是打包过程中的核心文件,它定义了执行入口类和所依赖库的路径。在运行Java应用程序时,系统会依据这个文件中的信息找到启动类和库。 - **支持包**:如果项目中使用了Eclipse的特定包,如SWT或...
这里需要注意的是命令中的`-jar`选项,它告诉Java运行时环境去读取该文件的`manifest.mf`文件,并从中找出`Main-Class`,然后执行该类的`main`方法。 #### 总结 通过上述步骤,可以在Linux环境下顺利地执行含有`...
在命令行中,切换到包含`.class`和`manifest.mf`文件的目录,然后运行以下命令: ``` jar cvfm cal.jar manifest.mf *.class ``` 这个命令的参数解释如下: - `c`:创建新的jar文件。 - `v`:显示详细输出。 ...
在这个过程中,需要注意几个重要的步骤,包括将依赖的 lib 包和配置文件正确地配置,生成 Class-Path 信息,并将其保存到 MANIFEST.MF 文件中。最后,将生成的 JAR 文件和配置文件、LIB 包里的引用文件放到同一...
总结来说,打包Java项目的关键在于正确使用`javac`和`jar`命令,以及创建和编辑MANIFEST.MF文件以指定主类。通过熟练掌握这些技能,开发者可以方便地管理和分发Java应用程序。无论是简单的无包结构项目,还是复杂的...
在 MANIFEST.MF 文件中,需要指定以下几个关键信息: * Manifest-Version:指定清单文件的版本号。 * Main-Class:指定程序运行的入口类,注意类名后不要加 class 扩展名。 * Class-Path:指定支持库的路径,"....
更进一步,MANIFEST.MF 文件是 JAR 文件的核心元数据文件,它提供了关于 JAR 包的详细信息,包括主类(Main-Class)等。标准的 MANIFEST.MF 文件通常包含更多属性,如版本信息、实现厂商等。例如: ``` Manifest-...
Manifest文件中的属性与值之间需以冒号和空格分隔,如`Main-Class: Test`。 ### 四、使用jar命令 使用jar命令可以执行以下操作: - 创建JAR文件:`jar cf jarfilename.jar file1 file2 ...` - 更新JAR文件:`jar ...
在导出的 JAR 文件中,有一个重要的文件叫做 `META-INF/MANIFEST.MF`,它指定了 JAR 文件的元数据,包括主类和类路径。你需要手动编辑这个文件,添加 `Main-Class` 和 `Class-Path` 字段。`Main-Class` 应设置为你...
打包的关键在于创建并配置`MANIFEST.MF`文件,指定执行入口类和支持库的路径。此外,如果项目中使用了特定的库或本地化文件,如SWT组件,也需要一并打包。 #### 1.2 包装的具体操作步骤 以一个使用SWT/JFace的项目...
当你双击这个JAR文件时,Java虚拟机会根据`MANIFEST.MF`中的`Main-Class`条目找到并执行主类,从而启动应用程序。 在实际开发中,可能会有更复杂的需求,例如包含资源文件、设置JAR的压缩选项、或者使用构建工具...
`MANIFEST.MF`文件是一个文本文件,位于JAR文件的根目录下,其中包含了元数据,如主类(Main-Class)和其他配置信息,包括`Class-Path`字段。这个字段用于指定运行该JAR文件所需的其他JAR文件或目录。 例如,假设...
4. **设置导出路径和MANIFEST.MF**:在下一个界面,指定JAR文件的保存位置,并为`Manifest file`输入一个新的文件名,如`MANIFEST.MF`。这里需要定义程序的入口点,即主类。例如,如果你的主类是`...
1. **单次打包,多处引用**:将共享的第三方类库仅打包一次,然后在每个依赖该类库的EJB Jar 或Web应用的`manifest.mf`文件中通过`Class-Path`属性引用。如此一来,不仅减少了重复打包的工作量,还降低了应用的整体...
3. **JAR文件结构**:如果你的程序被打包成了JAR,那么主类必须位于JAR的根目录下的`META-INF/MANIFEST.MF`文件中。MANIFEST文件应包含`Main-Class:`属性,指明主类的全名。如果MANIFEST文件缺失或主类信息错误,也...
在实践中,开发者还可能遇到其他问题,如依赖库缺失、版本冲突等,这些问题通常需要通过检查和调整MANIFEST.MF文件、设置正确的类路径、或者使用构建工具(如Maven或Gradle)来解决。 总的来说,理解Java程序的打包...