2016-03-30 61 views
0

我想在apache-karaf 3.0.3中部署一個包,其中包含一定數量的第三方jar文件,我將其嵌入 因爲第三方jar文件不是OSGi捆綁。其中一個jar文件包含一個java文件中的import語句,在最新版本的jar文件中不存在 (我沒有jar文件的舊版本)。在karaf中部署第三方jar文件時出錯

e.g:jar文件1 - Class1的 - 進口com.java.test.io

雖然部署與我面臨的一個錯誤的jar文件我的應用程序包。

錯誤執行命令:在束執行命令錯誤: 無法在束391執行命令:束「com.test.example.bundle_0.1.0.SNAPSHOT [391]」不能被解析。 原因:缺少約束:Import-Package:com.java.test.io;版本=「0.0.0」

我想複製簡單的Java應用程序的場景,它按預期工作。 我的假設是,卡拉夫將掃描所有進口報表,並檢查是否存在合適的進口報表(包級別許可) 是否存在適當的進口報表。 任何人都可以解釋爲什麼Java應用程序運行,並在卡拉夫它失敗?

的pom.xml

<plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Bundle-SymbolicName>mybundlename</Bundle-SymbolicName> 
         <Embed-Dependency>jar1,jar2,jar3,jar4</Embed-Dependency> 

        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
+0

你是如何利用嵌入式jar文件構建你的包? – Ralf

回答

0

重要的不是在你的類包裝進口,但在你的包的清單數據包導入。

如果您的代碼在OSGi容器之外工作,那麼這意味着在您的特定使用場景中,導入的包在運行時不是必需的。或者根本不需要,應該清理乾淨。

您必須部署捆綁才能滿足導入要求,或者在構建捆綁包時必須禁止添加導入com.java.test.io。使用maven-bundle-plugin,你可以這樣做:

<instructions> 
    <Embed-Dependency>...</Embed-Dependency> 
    <Import-Package> 
     !com.java.test.io.*, 
     * 
    </Import-Package> 
</instructions> 
+0

@謝謝拉爾夫。 com.java.test.io包駐留在第三方jar文件中。是否有可能從嵌入式依賴關係jar文件中排除軟件包。對於非osgi jar文件也沒有限制(通過在karaf中部署jar進行測試)因此,它希望捆綁包到位 – Shriram

+0

@Shriram,是的,如果你使用mave-bundle-plugin,例如,你可以很容易排除將包添加到MANIFEST的導入部分。你如何利用嵌入式第三方JAR構建你的包? – Ralf