2011-09-06 5 views
6

Mam problem z plugin maven-bundle:Maven problemem opakowanie pakiet, znany jako MNG-4338

chcę wdrożyć swój projekt jako pakiet osgi Czemu Używam opakowanie jako wiązki. Wygląda jednak na to, że pom nie zna opakowania jako pakietu. Tutaj można zobaczyć mojego pom.xml:

<project ...>... 
    <packaging>bundle</packaging> 
<version>1.0.0</version> 

<name>Simple CXF project using spring configuration</name> 

<properties> 
    <cxf-version>2.4.2</cxf-version> 
</properties> 

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.5</source> 
        <target>1.5</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <extensions>true</extensions> 
       <version>2.3.5</version> 
       <configuration> 
        <instructions> 
         <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName> 
         <Bundle-Name>${project.name}</Bundle-Name> 
         <Bundle-Version>${project.version}</Bundle-Version> 
         <Export-Package>demo.hw.server</Export-Package> 
         <Bundle-Activator>demo.hw.server.Activator</Bundle-Activator> 
         <Require-Bundle>org.apache.cxf.bundle</Require-Bundle> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxws</artifactId> 
     <version>${cxf-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-transports-http</artifactId> 
     <version>${cxf-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>org.osgi.core</artifactId> 
     <version>1.4.0</version> 
    </dependency> 
</dependencies> 

</project> 

Mówią, że ten błąd został już ustalony (http://jira.codehaus.org/browse/MNG-4338), ale wydaje mi się, że hasn "t. Czy ktoś wcześniej napotkał ten problem i znalazł rozwiązanie?

komunikat o błędzie jest tak:

[INFO] Scanning for projects... 
[ERROR] The build could not read 1 project -> [Help 1] 
[ERROR] 
[ERROR] The project com.talend.liugang.cxf:java_first_jaxws:1.0.0 (C:\Users\Andreas\workspace\java_first_jaxws\pom.xml) has 1 error 
[ERROR]  Unknown packaging: bundle @ line 7, column 13 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException 

poważaniem, Saen

Odpowiedz

14

Biorąc pod uwagę Twój przykład pom powyżej, należy po prostu przenieść plugin maven-bundle poza węzłem <pluginManagement>. <pluginManagement> jest zwykle używany do celów dziedziczenia w pominkach dla rodziców. Typ pakowania pakietu jest dostarczany przez wtyczkę maven-bundle (dlatego potrzebna jest <extensions>true</extensions>), więc w tym przypadku ta wtyczka musi znajdować się poza <pluginManagement>.

<project ...>... 
    <packaging>bundle</packaging> 
    <version>1.0.0</version> 

    <name>Simple CXF project using spring configuration</name> 

    <properties> 
     <cxf-version>2.4.2</cxf-version> 
    </properties> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <configuration> 
         <source>1.5</source> 
         <target>1.5</target> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 

     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <extensions>true</extensions> 
       <version>2.3.5</version> 
       <configuration> 
        <instructions> 
         <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName> 
         <Bundle-Name>${project.name}</Bundle-Name> 
         <Bundle-Version>${project.version}</Bundle-Version> 
         <Export-Package>demo.hw.server</Export-Package> 
         <Bundle-Activator>demo.hw.server.Activator</Bundle-Activator> 
         <Require-Bundle>org.apache.cxf.bundle</Require-Bundle> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-frontend-jaxws</artifactId> 
      <version>${cxf-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-transports-http</artifactId> 
      <version>${cxf-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>org.osgi.core</artifactId> 
      <version>1.4.0</version> 
     </dependency> 
    </dependencies> 

</project> 
+9

Miał podobny problem; Brakowało mi bitu true . Dzięki! – Sbodd

+0

Pobłogosław, Sbodd – user64141

0

Widzę podobny problem. Wydaje mi się, że dzieje się tak, gdy identyfikator grupy kończy się tak, jak rozpoczyna się identyfikator artefaktu. Staram się połączą coś takiego:

<groupId>org.slf4j</groupId> 
<artifactId>slf4j-api.plugin</artifactId> 

slf4j z id artefakt zostanie usunięty na to kończy się tak: org.slf4j.api.plugin w manifeście nazwy jako symboliczny.

1

Yeap, problem jest to, że <GroupID> org.apache.felix </GroupID > musi być poza <pluginManagement>.