在Felix.missing要求[5.0] osgi.wiring.package中启动捆绑包的问题; (osgi.wiring.package = com.sun.jersey.api.core)

时间:2012-04-03 07:38:13

标签: osgi apache-felix

我正在使用maven-bundle-plugin将war文件构建为一个我想在Felix中部署的bundle。这是相同的POM文件。

<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>
<parent>
  <groupId>net.java</groupId>
  <artifactId>jvnet-parent</artifactId>
  <version>1</version>
</parent>
<groupId>com.sun.jersey.samples.helloworld-osgi-webapp</groupId>
<artifactId>war-bundle</artifactId>
<version>1.11</version>
<name>Helloworld OSGi WebApp - Jersey Sample WAR</name>
<packaging>war</packaging>
<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <!--  <scope>provided</scope> -->
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>4.2.0</version>
        <!--  <scope>provided</scope> -->
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.compendium</artifactId>
        <version>4.2.0</version>
        <!--  <scope>provided</scope> -->
    </dependency>
     <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jettison</groupId>
        <artifactId>jettison</artifactId>
        <version>1.1</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.5.5</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.5.5</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-jaxrs</artifactId>
        <version>1.5.5</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-xc</artifactId>
        <version>1.5.5</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.http.api</artifactId>
       <version>2.0.4</version>
    </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <inherited>true</inherited>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <executions>
                <execution>
                    <id>bundle-manifest</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>manifest</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
              <manifestLocation>${project.build.directory}/META-INF</manifestLocation>
              <supportedProjectTypes>
                    <supportedProjectType>bundle</supportedProjectType>
                    <supportedProjectType>war</supportedProjectType>
              </supportedProjectTypes>
              <instructions>
                    <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
                    <Import-Package>com.sun.jersey.api.core,com.sun.jersey.spi.container.servlet,*</Import-Package>
                    <Export-Package>com.sun.jersey.samples.helloworld</Export-Package>
                    <Webapp-Context>jersyweb</Webapp-Context>
                    <Web-ContextPath>jersyweb</Web-ContextPath>
                    <Bundle-Activator>com.sun.jersey.samples.helloworld.WebAppContextListener</Bundle-Activator>
                    <Bundle-ClassPath>WEB-INF/classes</Bundle-ClassPath>
                    <Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency>
                    <Embed-Transitive>true</Embed-Transitive>
              </instructions>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1-alpha-2</version>
            <configuration>
                <attachClasses>true</attachClasses>
                <archive>
                    <manifestFile>${project.build.directory}/META-INF/MANIFEST.MF</manifestFile>
                    <manifestEntries>
                      <Bundle-ClassPath>WEB-INF/classes</Bundle-ClassPath>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.apache.felix
                                    </groupId>
                                    <artifactId>
                                        maven-bundle-plugin
                                    </artifactId>
                                    <versionRange>
                                        [2.0.1,)
                                    </versionRange>
                                    <goals>
                                        <goal>manifest</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.jvnet.jaxb2.maven2
                                    </groupId>
                                    <artifactId>
                                        maven-jaxb2-plugin
                                    </artifactId>
                                    <versionRange>
                                        [0.8.1,)
                                    </versionRange>
                                    <goals>
                                        <goal>generate</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

当我使用maven install构建它时,我可以在war包的META-INF文件夹中看到逻辑上正确的MANIFEST.MF文件。这是MANIFEST.MF。

**Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven Bundle Plugin
Built-By: parag.ki
Build-Jdk: 1.6.0_18
Bundle-ClassPath: WEB-INF/classes,servlet-api-2.5.jar,org.osgi.core-4.
 2.0.jar,org.osgi.compendium-4.2.0.jar,jersey-core-1.11.jar,jersey-ser
 ver-1.11.jar,asm-3.1.jar,jettison-1.1.jar,stax-api-1.0.1.jar,jackson-
 core-asl-1.5.5.jar,jackson-mapper-asl-1.5.5.jar,jackson-jaxrs-1.5.5.j
 ar,jackson-xc-1.5.5.jar,org.apache.felix.http.api-2.0.4.jar
Bnd-LastModified: 1333436962460
Bundle-Activator: com.sun.jersey.samples.helloworld.WebAppContextListe
 ner
Bundle-Description: Java.net - The Source for Java Technology Collabor
 ation
Bundle-ManifestVersion: 2
Bundle-Name: Helloworld OSGi WebApp - Jersey Sample WAR
Bundle-SymbolicName: war-bundle
Bundle-Version: 1.11.0
Embed-Dependency: *;scope=compile|runtime;inline=false
Embed-Transitive: true
Embedded-Artifacts: servlet-api-2.5.jar;g="javax.servlet";a="servlet-a
 pi";v="2.5",org.osgi.core-4.2.0.jar;g="org.osgi";a="org.osgi.core";v=
 "4.2.0",org.osgi.compendium-4.2.0.jar;g="org.osgi";a="org.osgi.compen
 dium";v="4.2.0",jersey-core-1.11.jar;g="com.sun.jersey";a="jersey-cor
 e";v="1.11",jersey-server-1.11.jar;g="com.sun.jersey";a="jersey-serve
 r";v="1.11",asm-3.1.jar;g="asm";a="asm";v="3.1",jettison-1.1.jar;g="o
 rg.codehaus.jettison";a="jettison";v="1.1",stax-api-1.0.1.jar;g="stax
 ";a="stax-api";v="1.0.1",jackson-core-asl-1.5.5.jar;g="org.codehaus.j
 ackson";a="jackson-core-asl";v="1.5.5",jackson-mapper-asl-1.5.5.jar;g
 ="org.codehaus.jackson";a="jackson-mapper-asl";v="1.5.5",jackson-jaxr
 s-1.5.5.jar;g="org.codehaus.jackson";a="jackson-jaxrs";v="1.5.5",jack
 son-xc-1.5.5.jar;g="org.codehaus.jackson";a="jackson-xc";v="1.5.5",or
 g.apache.felix.http.api-2.0.4.jar;g="org.apache.felix";a="org.apache.
 felix.http.api";v="2.0.4"
Import-Package: com.sun.jersey.api.core,com.sun.jersey.samples.hellowo
 rld,com.sun.jersey.spi.container.servlet,com.sun.net.httpserver,javax
 .activation,javax.annotation.security,javax.imageio,javax.imageio.spi
 ,javax.imageio.stream,javax.mail,javax.mail.internet,javax.mail.util,
 javax.microedition.io,javax.naming,javax.security.auth.x500,javax.xml
 .bind,javax.xml.bind.annotation,javax.xml.bind.annotation.adapters,ja
 vax.xml.datatype,javax.xml.parsers,javax.xml.transform,javax.xml.tran
 sform.dom,javax.xml.transform.sax,javax.xml.transform.stream,org.joda
 .time,org.joda.time.format,org.w3c.dom,org.w3c.dom.bootstrap,org.w3c.
 dom.ls,org.xml.sax
Tool: Bnd-1.50.0
Web-ContextPath: jersyweb
Webapp-Context: jersyweb**

但是当我在Apache Felix中部署并启动它时,我看到了以下错误。

克! org.osgi.framework.BundleException:bundle war-bundle中的未解决约束[5]:无法解析5.0:缺少要求[5.0] osgi.wiring.package; (osgi.wiring.package = com.sun.jersey.api.core)

包com.sun.jersey.api.core是jersey-core-1.11.jar的一部分,已经在MANIFEST.MF中的Bundle-ClassPath中提到了那么为什么我会收到此错误?

如果我开始为jersey-core-1.11.jar添加像bundle这样的捆绑文件,那么问题就解决了,但我不认为它是一个非常好的解决方案。事实上,为此只提供了maven bundle插件和标签。

请建议。

1 个答案:

答案 0 :(得分:4)

快速查看MANIFEST文件,我看到 com.sun.jersey.api.core的导入包。我认为你也嵌入了这个包,但这对这种依赖没有影响。如果你要求依赖,你就会得到它

只需删除它即可,在maven中,您可以将其从Import-Package行中删除。

另外,你确实嵌入了很多东西。我认为在webapp中嵌入servlet api不是一个好主意,因为应用程序服务器提供了这个。它可能有效,但在部署到其他应用程序服务器时可能会遇到麻烦。