【问题标题】:Eclipse plugin with external third party jar带有外部第三方 jar 的 Eclipse 插件
【发布时间】:2014-12-19 08:43:16
【问题描述】:

我有一个包含不同插件的 RCP 应用程序。在其中一个插件中,我使用了外部第三方 jar。由于版权原因,我无法将该罐子捆绑到我的产品中。所以我尝试在运行时将 jar 作为外部 jar 包含在内。我所做的如下

在插件 manifest.mf 我有

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: EaCom-plugin;singleton:=true
Bundle-Version: 2.1.0
Require-Bundle: org.eclipse.core.runtime
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ClassPath: .,
 external:$eaapi_location$/eaapi.jar
Bundle-NativeCode: external:$eaapi_location$/SSJavaCOM.dll
Export-Package: org.sparx
Bundle-Vendor: %pluginVendor

在运行时 -> 我添加的导出包

 org.sparx

在我的类路径下

  external:$eaapi_location$/eaapi.jar

build.properties

source.. = src/main/java/,\
       src/main/scala/,\
       src/main/resources/,\
       src/test/java/,\
       src/test/scala/,\
       src/test/resources/
output.. = bin/
bin.includes = META-INF/,\

在 build.properties 的第一行有一个警告。警告是

source.external:$eaapi_location$/eaapi.jar 构建条目丢失

我导出产品:myrcpapp.exe 并在我的产品 myrcpapp.ini 的配置文件中添加 vm 参数:-Deaapi_location=C:/JavaAPI

我收到以下错误

错误信息:java.lang.error: unresolved compiler questions: Repository cannot be resolved into a type

虽然当我在 eclipse 中运行时它工作正常我错过了什么?

我们将不胜感激。

谢谢

【问题讨论】:

    标签: java eclipse-plugin eclipse-rcp executable-jar rcp


    【解决方案1】:

    好的,我解决了我的问题。实际情况是我有一个第三方 jar,它包含在包装器插件项目中,其他插件需要它才能成功编译。在编译(导出产品)期间,这些其他插件使用位于 wrapper 插件中的 jar 来成功编译,为此我需要在 wrapper 插件的 java 类路径下提供 jar 的位置。

    但是一旦产品被导出,我不希望这个 jar 成为产品的一部分,因为它是第三方 jar,不应该与 exe 一起分发。所以解决方案是

    在包装插件 Manifest -> Runtime Tab -> Classpath 下提供 jar 的位置。在我的情况下是

     src/main/resources/thridparty.jar 
    

    在 Build 选项卡下 -> Binary Build 仅选择清单。

    在 MANIFEST.MF 中包含

    Bundle-ClassPath: external:$thirdpartyjar_location$/thirdparty.jar,
    src/main/resources/thirdparty.jar
    

    导出产品并在产品配置文件下添加系统属性

     -Dthirdpartyjar_location=path/to/the/thirdpartyjar
    

    当您使用 exe 运行产品时,它将使用您在配置中提供的外部路径中的 jar。

    希望对某人有所帮助。

    【讨论】:

      【解决方案2】:

      难以解决的问题,但我认为 BJ Hargrave 的回答 (https://stackoverflow.com/a/19552056/1257372) 建议将 jar 放在类路径中并让系统捆绑包导出它们可能是最好的方法。

      您可以通过在您的应用程序 ini 文件中添加几行来配置额外的系统包导出:

      org.osgi.framework.system.packages.extra= \
      org.thirdparty.xxx; version=1.0
      

      我们解决此问题的另一种方法是将应用程序包装在安装程序中。安装向导向用户显示许可证并提示他们下载第三方库。然后安装程序将它们添加到应用程序中。设置工作更多,但使最终用户的工作更轻松。

      【讨论】:

      • 我会看看你的建议,并会回复你谢谢
      • 将 jars 放在类路径上并让系统包导出,您能根据我提供的清单解释一下吗?
      • 时间有点短,稍后会编辑答案,但 jar 需要在 Eclipse 类路径中(即在 .ini 文件中),而不是在清单中的捆绑类路径中。
      • 感谢您的回复,如果您提供我需要放置 jar 的确切文件,我将非常感谢
      【解决方案3】:

      在清单中你需要导入你正在使用的外部包:

      Import-Package: org.thirdparty.xxx,org.thirdparty.yyy
      

      【讨论】:

      • 我希望在运行时导入包。所以我已经在运行时添加了它们 -> 导出包
      猜你喜欢
      • 2012-01-13
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2014-12-31
      相关资源
      最近更新 更多