2012-03-29 13 views
13

Ich habe ein OSGi-Paket als Abhängigkeit in meinem Maven-Projekt deklariert. (Es kommt nur der felix Behälter sein.)Warum kann Maven keine OSGI-Bündelabhängigkeit finden?

<dependency> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>org.apache.felix.framework</artifactId> 
    <version>4.0.2</version> 
    <type>bundle</type> 
    <scope>compile</scope> 
</dependency> 

Wenn ich versuche, zu bauen, sagt sie es nicht finden kann.

Aber ein kurzer Blick in die Zentrale verifiziert, dass dieses Artefakt tatsächlich da ist. Ich bemerkte, dass wenn ich es zu einem "jar" Typ ändern, es in der Tat das Glas (Bundle) für mich herunterladen wird. Was brachte mich zum Nachdenken, warum nannte ich es überhaupt ein Bündel? Nun, ich tat das, denn als ich m2e benutzte, um das Artefakt nachzuschlagen, nannte es es ein "Bündel"; Tatsächlich hat m2e jene Koordinaten erzeugt, die ich oben anführe.

Ist das Bündel kein gültiger Mavenartefakttyp? Wenn nicht, warum nennt m2e das?

+0

prüfen diese Frage http://stackoverflow.com/questions/5389691/what-is-the-meaning-of-type-bundle-in- A-Maven-Abhängigkeit – jordeu

+0

Danke, aber dieser Post sagt nur, dass ein "Bündel" ein OSGI-Bündel ist. Ich weiß das. Ich mache mir Sorgen, warum Maven das Artefakt nicht zu lösen scheint. – chad

Antwort

24

Dies ist kein Fehler in m2e, wie in der angenommenen Antwort erwähnt. Das Problem ist, dass Maven nicht weiß, was der Typ "Bundle" ist. Sie müssen also ein Plugin hinzufügen, das es definiert, nämlich das maven-bundle-plugin. Beachten Sie, dass Sie auch die Extensions Eigenschaft auf true festlegen müssen. So sollte das POM hat so etwas wie

<plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <version>2.4.0</version> 
     <extensions>true</extensions> 
</plugin> 

Das Problem mit der akzeptierten Antwort ist, dass es funktioniert, wenn die Abhängigkeit vom Typ Bündel eine direkte Abhängigkeit ist; Da es Ihr Pom ist, der es erklärt, können Sie einfach den Typ entfernen. Wenn Ihre Abhängigkeit selbst jedoch eine Abhängigkeit vom Typ Bündel hat, dann sind Sie geschraubt, weil dann eines Ihrer transitiven Abhängigkeiten vom Typ Bundle ist und Sie nicht einfach den Typ darin entfernen können, da Sie nicht der Besitzer dieses Artefakts sind. Ich habe Zugriff auf die Pom, die wiederum Ihre aktuelle Ausführung nicht versteht. Es wird versuchen, nach repo/your-dependency.bundle zu suchen

Ich stieß auf dieses Problem, wenn Sie das Abhängigkeits-Plugin zu kopieren-Abhängigkeiten verwenden. In diesem Fall muss die Plugin-Abhängigkeit in das Plugin selbst gehen. Sie müssen nur die Abhängigkeit Plugin um das Bündel Plugin wissen:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>2.4.0</version> 
      <type>maven-plugin</type> 

     </dependency> 
    </dependencies> 
    <extensions>true</extensions> 
</plugin> 
+4

Das sollte wirklich die akzeptierte Antwort sein. – JBT

Verwandte Themen