外部引用第三方库(Jar)在另一个Jar内部而不包装第二个内部的第一个

时间:2011-09-25 18:29:02

标签: java jar manifest

我正在编写一小段代码,旨在使用AppleScriptEngine与Growl进行通信。我会获得一个名为MyApplication.jar的jar文件和我的所有类,但我需要引用AppleScriptEngine.jar(由Apple开发并存储在/ System / Library / Java / Extension中)...这里的问题是:AppleScriptEngine.jar存在在每个Os x发行版中,所以我想在MyApplication.jar MANIFEST.MF中引用它而不在我的.jar文件中添加AppleScriptEngine.jar。这基本上有两个原因:首先AppleScriptEngine是Apple的专有文件,其次我希望有一种方法可以引用文件系统中的现有文件。我读了很多关于jar文件的正确组成的内容,在每个例子中,我发现在编码器的jar文件中打包了外部jar文件。 我尝试修改MANIFEST中的class-path属性,以便以这种方式直接指向AppleScriptEngine.jar:

清单 - 版本:1.0

Rsrc-Class-Path:./

Class-Path:/System/Library/Java/Extensions/AppleScriptEngine.jar

Rsrc-Main-Class:core.MyApplicationLauncher

Main-Class:org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

Rsrc-Class-Path应该是我的jar中的本地引用,但给出Class-Path I的绝对路径sholud能够引用我系统中的每个文件。也许我定义路径的方式有问题,或者我只能引用嵌套在jar中的文件。在Eclipse中,显然一切正常,因为它引用了包含AppleScriptEngine.jar的JRE系统库。所以,也许有一种方法可以直接引用我的MANIFEST文件中的JRE系统库。经过数小时的冲浪后,我无法找到答案。有人想要克服这种僵局吗?

1 个答案:

答案 0 :(得分:2)

最后,经过大量的试验和错误,我找到了解决方案。我的错误是尝试将AppleScriptEngine.jar的绝对路径作为属性添加到Class-Path;相反,正确的解决方案是将Class-Path的属性仅添加包含我们感兴趣的Jar文件(外部文件夹)的文件夹的绝对路径,然后将该Jar文件的名称添加为{{的值1}}。我相信这是在文件已经位于文件系统中的每种情况下引用外部库的正确方法。我的Rsrc-Class-Path

MANIFEST.MF

注意在Manifest-Version: 1.0 Rsrc-Class-Path: ./ AppleScriptEngine.jar Class-Path: . /System/Library/Java/Extensions/ Rsrc-Main-Class: core.NotifierLauncher Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader 之后,在点之前和点之后有一个空格。这是因为空格是Class-Path:文件中用于分隔不同参数的方式。没有关于该论点的友好文档