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

时间:2014-12-19 08:43:17

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

我有一个包含不同插件的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:未解决的编译问题:无法将存储库解析为类型

虽然我在日食中运行时工作正常我缺少什么?

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

由于

3 个答案:

答案 0 :(得分:3)

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

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

在包装器插件Manifest下 - >运行时标签 - > Classpath提供jar的位置。就我而言,它是

 src/main/resources/thridparty.jar 

在构建标签下 - >二进制构建仅选择清单。

在MANIFEST.MF中包括

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

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

 -Dthirdpartyjar_location=path/to/the/thirdpartyjar

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

希望它会对某人有所帮助。

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:-1)

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

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