带有外部第三方jar的Eclipse插件

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

在Plugin 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:未解决的编译问题:无法将存储库解析为类型

虽然我在日食中运行时工作正常我错过了什么?

任何帮助将受到高度赞赏。

谢谢

好的,我解决了我的问题。 实际情况是我有一个第三部分jar包含在包装器插件项目中,并且其他插件需要成功编译。 在编译(导出产品)期间,这些其他插件使用位于包装器插件中的jar来成功编译,为此我需要在包装器插件的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。

希望它会帮助某人。

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

您可以通过向应用程序ini文件中添加几行来配置其他系统包导出:

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

作为替代方案,我们绕过这个方法是将应用程序包装在安装程序中。 安装向导向用户显示许可证,并提示他们下载第三方库。 然后安装程序将它们添加到应用程序中。 设置更多工作,但最终用户工作更轻松。

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

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