带有外部第三方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