2014-04-04 38 views
0

我有一個簡單的OSGi包寫入,這裏是源文件。當我將它安裝在equinox OSGi容器中時,它不會自動解決它。有人可以解釋我在這裏做錯了嗎?OSGi包不能自動解決

package org.sample.api; 

/** 
* Created on 3/11/14. 
*/ 
public interface Hello { 

    void sayHello(); 
} 

這是捆綁包的pom.xml文件。

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <artifactId>osgi</artifactId> 
     <groupId>osgi</groupId> 
     <version>1.0</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>sample-api</artifactId> 
    <version>1.0</version> 
    <packaging>bundle</packaging> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <version>2.3.5</version> 
       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Bundle-Vendor>Sample Inc</Bundle-Vendor> 
         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
         <Export-Package> 
          org.sample.api*;version=1.0.0 
         </Export-Package> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

MANIFEST.MF

Manifest-Version: 1 
Bnd-LastModified: 1396602001251 
Build-Jdk: 1.6.0_45 
Built-By: Zeus 
Bundle-ManifestVersion: 2 
Bundle-Name: sample-api 
Bundle-SymbolicName: sample-api 
Bundle-Vendor: Sample Inc 
Bundle-Version: 1.0.0 
Created-By: Apache Maven Bundle Plugin 
Export-Package: org.sample.api;version="1.0.0" 
Tool: Bnd-1.43.0 

這是軟件包安裝控制檯輸出

Bundle id is 7 
RegisteredServices null 
ServicesInUse  null 
LoaderProxy   sample-api; bundle-version="1.0.0" 
Fragments   null 
ClassLoader   null 
Version    1.0.0 
LastModified   1396605985751 
Headers    Bnd-LastModified = 1396602001251 
Build-Jdk = 1.6.0_45 
Built-By = Zeus 
Bundle-ManifestVersion = 2 
Bundle-Name = sample-api 
Bundle-SymbolicName = sample-api 
Bundle-Vendor = Sample Inc 
Bundle-Version = 1.0.0 
Created-By = Apache Maven Bundle Plugin 
Export-Package = org.sample.api;version="1.0.0" 
Manifest-Version = 1 
Tool = Bnd-1.43.0 


BundleContext  null 
BundleId    7 
StartLevel   1 
SymbolicName   sample-api 
BundleData   sample-api_1.0.0 
KeyHashCode   7 
StateChanging  null 
BundleDescription sample-api_1.0.0 
Framework   [email protected] 
ResolutionFailureException org.osgi.framework.BundleException: The bundle "sample-api_1.0.0 [7]" could not be resolved 
Revisions   [sample-api_1.0.0] 
Key     7 
ProtectionDomain  null 
Location    file:/home/Zeus/idea-projects/osgi/sample-api/target/sample-api-1.0.jar 
State    2 
Bundle     7|Installed | 1|sample-api (1.0.0) 

回答

1

請從罐後所生成MANIFEST.MF。我看不出有什麼毛病。

如果捆綁包未解決,那麼它處於什麼狀態?安裝?一個可能的原因可能是該容器的一些傳遞依賴關係在容器上不可用。

P.S:您可能想要使用maven-bundle-plugin的最新版本2.4.0。

EDIT1 這是我得到的清單:

清單-版本:1.0
BND-上次更改時間:1396605817562
內建的jdk:1.7.0_45
內置者:anshuman
捆綁-ManifestVersion:2
Bundle-Name:sample-api
Bundle-SymbolicName:sample-api
Bundle-Vendor:Sample Inc
捆綁-版本:1.0.0
創建-者:阿帕奇Maven的捆綁插件
出口型套餐:org.sample.api;版本= 「1.0.0」
工具:BND-2.1.0.20130426-122213

EDIT2 我希望你在安裝後刷新並啓動軟件包。
刷新7
開始7
其中7是您的包ID。

+0

添加清單數據。它處於安裝狀態。當使用「diag」命令時,它說沒有沒有未解決的約束。 –

+0

這不是必要的,但要排除故障,您可以添加一個Bundle-Activator並查看是否啓動了啓動。 – Anshuman

+0

我試着在我的機器上運行你的例子(我使用Karaf,2.4.0的bundle-plugin),它工作正常:87 |活動| 80 | 1.0.0 | sample-api – Anshuman

0

看起來您沒有激活器與您的包,至少您的給定樣本不包含一個,並且您生成的清單的輸出不包含Bundle-Activator部分。在這一點上,我會說你的包只是處於解決狀態,因爲它不能被激活。

0

INSTALLED狀態不是錯誤狀態。這只是意味着已經安裝了捆綁軟件,這是真的。

如果您確實看到實際的錯誤消息,請提供詳細信息。