【问题标题】:Unable to start/stop osgi bundle programaticallly....due to following Exception无法以编程方式启动/停止 osgi 包....由于以下异常
【发布时间】:2013-12-28 01:40:24
【问题描述】:

符号名 ram

线程“主”org.osgi.framework.BundleException 中的异常: 捆绑 ram [1] 中未解决的约束:无法解析 1.0: 缺少要求 [1.0] osgi.wiring.package; (osgi.wiring.package=android.dalvik) 在 org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826) 在 org.apache.felix.framework.Felix.startBundle(Felix.java:1868) 在 org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944) 在 org.apache.felix.framework.BundleImpl.start(BundleImpl.java:931) 在 test9.Shulkam_Demo.main(Shulkam_Demo.java:35)

我的代码是..

import java.util.HashMap;
import java.util.Map;
import java.util.ServiceLoader;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;

public class Shulkam_Demo {

public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub

    FrameworkFactory frameworkFactory =    ServiceLoader.load(FrameworkFactory.class).iterator().next();
    Map<String, String> config = new HashMap<String, String>();
    //TODO: add some config properties
    Framework framework = frameworkFactory.newFramework(config);
    framework.start();
    //System.out.println(framework.getSymbolicName());

    //framework.start();

   //System.out.println( "bundle id" +framework.getBundleId());
    BundleContext bc = framework.getBundleContext();

    Bundle b = bc.installBundle("file:C:\\Documents and Settings\\Rishika Inc   Lab\\Desktop\\delete12\\shulkam_accounts-0.0.1-SNAPSHOT.jar");

    System.out.println("symbolic name "+b.getSymbolicName());
    b.start();
    System.out.println("frame work started");

    framework.waitForStop(0);

    System.out.println("shut dow");

}  

而 build.xml 是

<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">
<modelVersion>4.0.0</modelVersion>
<groupId>shulkam_accounts</groupId>
<artifactId>shulkam_accounts</artifactId>
<packaging>bundle</packaging>

<version>0.0.1-SNAPSHOT</version>
<properties>

<springdm.version>1.1.2</springdm.version>
</properties>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
      <source>1.6</source>
      <target>1.6</target>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.4.0</version>
    <extensions>true</extensions>
    <configuration>

    <instructions>
    <Export-Package>*</Export-Package>
    <Embed-Dependency>*</Embed-Dependency>
    <Embed-Transitive>true</Embed-Transitive>
    <Bundle-SymbolicName>ram</Bundle-SymbolicName>
    <Import-package>
    com.mysql.jdbc;version="5.1.15",
 org.osgi.framework;version="1.3.0",
!osgi.wiring.package,
!android.dalvik



 </Import-package>
<Bundle-Activator>shulkam_accounts.MyActivator</Bundle-Activator>


    </instructions>
    </configuration>
  </plugin>
  </plugins>
 </build>
 <dependencies>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.15</version>
</dependency>
<!-- Spring DM -->


    <dependency>
      <groupId>org.springframework.osgi</groupId>
      <artifactId>spring-osgi-io</artifactId>
      <version>${springdm.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.osgi</groupId>
      <artifactId>spring-osgi-core</artifactId>
      <version>${springdm.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.osgi</groupId>
      <artifactId>spring-osgi-extender</artifactId>
      <version>${springdm.version}</version>
      <scope>provided</scope>
    </dependency>

  <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.framework</artifactId>
        <version>4.0.2</version>
         <scope>provided</scope>
    </dependency>
    <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>


</dependencies>
</project>

任何帮助......

【问题讨论】:

    标签: java eclipse osgi-bundle


    【解决方案1】:

    我觉得

    <Export-Package>*</Export-Package>
    

    是原因。使用

    <Export-Package></Export-Package> 
    

    除非你真的导出了一些东西。

    【讨论】:

      【解决方案2】:

      你有一个缺少依赖的问题:

      missing requirement [1.0] osgi.wiring.package (osgi.wiring.package=android.dalvik)
      

      并且您已指定不想将其放入导入包中:

      <Import-package>
      com.mysql.jdbc;version="5.1.15",
      org.osgi.framework;version="1.3.0",
      !osgi.wiring.package,
      !android.dalvik
      

      要获得它,您应该将它放在您的 Import-Package 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-08
        • 2014-01-12
        • 1970-01-01
        • 2017-11-10
        • 1970-01-01
        • 2017-06-02
        • 2020-09-29
        • 2011-06-13
        相关资源
        最近更新 更多