我有一个包含不同插件的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:未解决的编译问题:无法将存储库解析为类型
虽然我在日食中运行时工作正常我缺少什么?
任何帮助都将受到高度赞赏。
由于
答案 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