2012-04-04 69 views
1

我想使用com.sun.crypto.provider.SunJCE(用於HMAC)在OSGi包使用com.sun.crypto.provider.SunJCE。在OSGi包

我使用Maven的捆綁,插件與這些CONFIGS:

<Embed-Dependency>*;scope=runtime;inline=false</Embed-Dependency> 
<Import-Package>*;resolution:=optional</Import-Package> 

當我執行我的包我得到這個錯誤:

Caused by: java.lang.ClassNotFoundException: com.sun.crypto.provider.SunJCE 

我怎樣才能獲得的代碼在我的OSGi捆綁有權訪問com.sun.crypto.provider?在你的Maven配置

回答

3

看,一件事跳出來是讓你的所有包裝的產品進口可選是不明智的。 OSGi通過將問題推遲到執行時間給您提供了許多好處,而不是讓您在捆綁開始時知道某些事情是不正確的。換句話說,快速失敗而不是失敗!它只適用於真正可選的依賴關係。

當然,你的最終目的是在所有沒有失敗,而不僅僅是失敗得更快。作爲了解發生了什麼的起點,是否打開了構建的捆綁包並檢查了加密包實際上是否被嵌入?檢查你的構建是否在做你期望的構建是個好主意。

但是,在這種特殊情況下,由於這是您通常期望JVM提供的類,因此我建議檢查引導類路徑以確保其可用,刪除嵌入依賴項以及使用org.osgi .framework.system.packages.extra屬性,而不是嵌入依賴項。

0

爲什麼你需要com.sun.crypto類?一般來說,您可以通過java。* API訪問加密函數?例如:

KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5"); 
SecretKey key = keyGen.generateKey(); 
Mac mac = Mac.getInstance(key.getAlgorithm()); 
mac.init(key); 
String str = "This message will be digested"; 
byte[] utf8 = str.getBytes("UTF8"); 
byte[] digest = mac.doFinal(utf8);