【问题标题】:external reference to third-party library (Jar) inside another Jar without wrap the second inside the first对另一个 Jar 中的第三方库 (Jar) 的外部引用,而不将第二个包含在第一个中
【发布时间】:2013-11-28 20:07:09
【问题描述】:

我正在编写一小段代码,旨在使用 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: ./

类路径:/System/Library/Java/Extensions/AppleScriptEngine.jar

Rsrc-Main-Class: core.MyApplicationLauncher

主类:org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

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

【问题讨论】:

    标签: java jar manifest


    【解决方案1】:

    经过多次尝试和错误,我终于找到了解决方案。我的错误是尝试将AppleScriptEngine.jar 的绝对路径添加为Class-Path 的属性;相反,正确的解决方案是将包含我们感兴趣的 Jar 文件(外部文件)的文件夹的绝对路径添加为 Class-Path 的属性,然后将该 Jar 文件的名称添加为 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: 之后的点前后各有一个空格。这是因为空格是MANIFEST 文件中用来分隔不同参数的方式。没有关于该论点的友好文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多