首页 > 解决方案 > 在清单文件中定义外部 jar 的正确方法

问题描述

我很难找出如何在 manifest.mf 中定义外部 jar。当我使用如下所示的类路径时,jar 文件不会被执行

Manifest-Version: 1.0
Sealed: true
Main-Class: org.test.MainClass
Class-Path: /Program Files (x86)/Testfolder/testlibrary/hibernate3.jar
 /Program Files (x86)/Testfolder/testlibrary/org.springframework.web-3.1.1.RELEASE.jar

当我如下所示给出正确的完整类路径时,未找到或加载主类

Manifest-Version: 1.0
Sealed: true
Main-Class: org.test.MainClass
Class-Path: D:/Program Files (x86)/Testfolder/testlibrary/hibernate3.jar
 D:/Program Files (x86)/Testfolder/testlibrary/org.springframework.web-3.1.1.RELEASE.jar

有谁知道我做错了什么?

标签: javamanifest

解决方案


根据文档

类路径属性

应用程序的清单可以指定一个或多个相对 URL,这些 URL 引用它所需的其他库的 JAR 文件和目录。这些相对 URL 相对于从中加载包含应用程序的代码库进行处理。

应用程序(或更一般地,一个 JAR 文件)使用 manifest 属性指定它需要的库的相对 URLClass-Path。如果在主机 Java 虚拟机上找不到其他库的实现,则此属性列出用于搜索其他库实现的 URL。这些相对 URL 可能包括应用程序所需的任何库或资源的 JAR 文件和目录。假定不以斜杠 ( ) 结尾的相对 URL/是指 JAR 文件。例如:

Class-Path: servlet.jar infobus.jar acme/beans.jar images/

在 JAR 文件的清单中最多Class-Path可以指定一个标头。

目前,出于安全原因, URL 必须JAR 文件的代码库相关。因此,远程可选包将源自与应用程序相同的代码库。

每个相对 URL 都根据从中加载包含应用程序或库的代码库进行解析。如果生成的 URL 无效或引用了无法找到的资源,则将其忽略


推荐阅读