2017-11-25 4 views
1

Ich möchte tibjms.jar und javax.jms-api-2.0.jar in einem einzigen Bundle mit Maven-Bundle-Plugin bündeln. Da der tibjms.jar nicht in der Maven repos ist Ich habe es zu meinem lokalen Repo zuerst:Wie man ein Drittanbieter-Glas in Maven bündelt?

mvn install:install-file -Dfile=/home/riyafa/Documents/Workspace/Support/NNINSURANCESUB-17/tibco/libs/jms-2.0.jar -DgroupId=com.tibco -DartifactId=tibjms -Dversion=4.4.0 -Dpackaging=jar -DgeneratePom=false 

Dann habe ich die folgende pom-Datei und baute es:

<?xml version="1.0" encoding="UTF-8"?> 
<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>org.riyafa</groupId> 
    <artifactId>tibco</artifactId> 
    <packaging>bundle</packaging> 
    <version>1</version> 

    <dependencies> 
     <dependency> 
      <groupId>com.tibco</groupId> 
      <artifactId>tibjms</artifactId> 
      <version>4.4.0</version> 
      <type>jar</type> 
     </dependency> 

     <dependency> 
      <groupId>javax.jms</groupId> 
      <artifactId>javax.jms-api</artifactId> 
      <version>2.0</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <version>3.3.0</version> 
       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
         <Bundle-Name>${project.artifactId}</Bundle-Name> 
         <Export-Package> 
          com.tibco.tibjms.*, 
          com.tibco.tibjms.naming.*, 
          com.tibco.tibjms.naming.tibjmsnaming.*, 
         </Export-Package> 
         <Import-Package> 
          *, 
          !javax.jms.*, 
         </Import-Package> 

         <Embed-Dependency> 
          javax.jms-api;scope=compile|runtime;inline=false; 
         </Embed-Dependency> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Der Build erfolgreich ist, aber ich sehe nur die javax.jms-api-2.0.jar im generierten jar: enter image description here

Ich möchte beide Gläser zu bündeln. Wie kann ich dies erreichen, wenn eines der Gläser ein Thirparty-Glas ist? Ich habe auch versucht, das Glas zur Pom-Datei als eine externe Bibliothek hinzuzufügen, die nicht funktionierte.

Antwort

1

Haben Sie nicht einfach vergessen, eine EmbedDependency für tibjms hinzuzufügen? Sie können auch alle einbetten kompilieren und Laufzeit depenedencies:

<Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency> 

Bitte beachten Sie, dass javax.jms-api bereits als ein Bündel verpackt ist. Wenn der einzige Zweck des tibco-Artefakts darin besteht, tibjms und jms-api zu bündeln, könnten Sie es in Erwägung ziehen, es ganz zu überspringen und stattdessen das Paket tibjms als Paket zu packen. Dann können Sie sowohl tibjms als auch jms-api als separate Bundles bereitstellen.

+0

Danke !! Ich möchte, dass sie in einem einzigen Bündel sind, weil ich möchte, dass die von jms-api offengelegten Methoden nur für tibjms.jar sichtbar sind, da sie mit einem anderen Jar kollidieren. –

+0

Guter Punkt über die Sichtbarkeit! – gjoranv

Verwandte Themen