2014-12-19 65 views
2

我有一個包含不同插件的RCP應用程序。在我使用外部第三方jar的插件之一中。由於版權原因,我無法將該jar包裝到我的產品中。所以我嘗試在運行時將該jar包含爲外部jar。我所做的是如下帶外部第三方罐子的Eclipse插件

在插件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 

在Classpath我

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的:未解決的編譯問題:存儲庫不能被解析成型

雖然它運行良好,當我在eclipse中運行我缺少什麼?

任何幫助將不勝感激。

感謝

回答

3

好吧,我解決了我的問題。實際情況是我有第三部分的jar包含在包裝器插件項目中,並且其他插件需要成功編譯。在編譯(導出產品)期間,這些其他插件使用位於包裝器插件中的jar進行成功編譯,爲此我需要在包裝器插件的java類路徑下提供jar的位置。

但是,一旦產品出口,我不希望這個罐子成爲產品的一部分,因爲它的第三方jar,它不應該與exe分發。所以解決方案是

在包裝器插件下Manifest - > Runtime Tab - > Classpath提供jar的位置。在我的情況下,它是

src/main/resources/thridparty.jar 

在生成選項卡 ​​- >二進制版本只選擇清單。

在MANIFEST.MF包括

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

出口產品和產品配置文件下,當你使用EXE將使用的jar運行該產品添加的系統屬性

-Dthirdpartyjar_location=path/to/the/thirdpartyjar 

來自您在配置中提供的外部路徑。

希望它能幫助別人。

-1

在清單中需要導入您所使用的外部包:

​​
+0

我想要在運行時導入包。所以我已經在運行時添加它們 - >導出包 – Wearybands 2014-12-19 10:58:54

0

難以解決的問題,但我認爲BJ哈格雷夫的答案在這裏(https://stackoverflow.com/a/19552056/1257372)這表明把罐子在類路徑上並獲取系統包來導出它們可能是最好的方法。

您可以通過添加幾行到你的應用程序ini文件配置其他系統捆綁出口:

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

作爲替代,我們說服了,這是包裹在一個安裝程序中的應用程序的方式。安裝嚮導向用戶顯示許可證並提示他們下載第三方庫。然後安裝程序將它們添加到應用程序中。更多的工作要設置,但最終用戶的工作更容易。

+0

我會看看你的建議,並會回到你謝謝 – Wearybands 2014-12-19 15:06:43

+0

把jar放在classpath中並獲取系統包出口可以請你解釋考慮我提供的清單嗎? – Wearybands 2014-12-22 11:00:38

+0

位時間短,稍後將編輯答案,但該jar需要在Eclipse類路徑(即在.ini文件中)上,而不是在清單中的包類路徑上。 – 2014-12-22 12:43:02