2012-04-03 5 views
3

Ich benutze maven-bundle-plugin, um eine Kriegsdatei als Paket zu erstellen, das ich in Felix bereitstellen möchte. Hier ist die POM-Datei für das gleiche.Problem beim Starten des Bundles in Felix.missing Anforderung [5.0] osgi.wiring.package; (osgi.wiring.package = com.sun.jersey.api.core)

<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> 

Wenn ich bauen es mit Maven installieren, kann ich eine logisch richtig MANIFEST.MF Datei im Ordner META-INF des Krieges Bündel sehen. Hier ist 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** 

Aber wenn ich es in Apache Felix bereitstellen und starten, sehe ich folgenden Fehler.

g! org.osgi.framework.BundleException: Nicht aufgelöste Einschränkung in Bundle WarBundle [5]: Kann 5.0 nicht auflösen: fehlende Anforderung [5.0] osgi.wiring.package; (osgi.wiring.package = com.sun.jersey.api.core)

Paket com.sun.jersey.api.core ist ein Teil von jersey-core-1.11.jar, welches bereits dort in Bundle erwähnt ist. ClassPath in MANIFEST.MF dann, warum bekomme ich diesen Fehler?

Wenn ich anfangen, entsprechende Bundle-Datei wie Bundle für Jersey-Core-1.11.jar setzen dann Problem gelöst ist, aber ich sehe es nicht als eine sehr gute Lösung. In der Tat für diesen Zweck nur Maven-Bundle-Plugin zur Verfügung gestellt und Tags.

Bitte um Rat.

+2

Ich sehe, dass diese Frage für eine ganze Weile unbeantwortet ist, also bist du wahrscheinlich sowieso weitergezogen. Immer noch als Tipp: Fügen Sie weitere Tags hinzu. Sie haben es nur als Apache-Felix getaggt, und ich (und ich vermute, dass viele bei mir sind) verfolgen nur OSGi-Fragen, die ziemlich genau alle Felix-Fragen beinhalten. Hätten Sie das getan, hätten Sie innerhalb von zwei Stunden statt zwei Monaten eine Antwort erhalten. Für zukünftige Referenz habe ich das Tag hinzugefügt. –

Antwort

4

Mit einem kurzen Blick auf die MANIFEST-Datei, sehe ich, dass ist ein Import-Paket für com.sun.jersey.api.core. Ich denke, dass Sie dieses Paket auch einbetten, aber das hat keine Auswirkungen auf diese Abhängigkeit. Wenn Sie nach einer Abhängigkeit fragen, erhalten Sie es

Einfach entfernen das sollte funktionieren, in Maven können Sie es aus der Import-Paket-Zeile entfernen.

Auch, Sie einbetten eine Menge. Ich denke, das Einbetten einer Servlet-API in eine Webanwendung ist keine gute Idee, da der Anwendungsserver das bereitstellt. Es könnte funktionieren, aber Sie könnten bei der Bereitstellung auf anderen Anwendungsservern Probleme bekommen.

Verwandte Themen