2011-09-15 15 views
8

Fondamentalmente, il mio servizio Web deve essere distribuito come un unico pacchetto jar OSGi. Pertanto:Provare a creare un bundle OSGi in Maven con dipendenze incorporate. Non sembra possibile escludere le dipendenze transitive dal classpath BND

  1. Il pacchetto deve contenere tutte le dipendenze di tipo maven di compilazione e runtime.
  2. Deve inoltre contenere tutte le dipendenze non opzionali che dipendono da tali dipendenze (ad esempio, le dipendenze transitive).

Sto tentando di utilizzare il plugin maven-bundle per ottenere ciò. Ho usato Embed-Dependency per ottenere tutte le mie dipendenze di compilazione e runtime nel bundle, e ho usato Embed-Transitive per incorporare tutte le dipendenze transitive. Ho quindi capito come usare excludeDependencies per escludere le dipendenze Maven dal classpath BND (sono spostati su Private-Package nel Manifest), ma per la vita di me non riesco a capire come ottenerlo per escludere le dipendenze transitive . A prescindere da ciò che faccio, le dipendenze transitive sembrano ancora apparire nell'elenco Importa-pacchetto nel Manifesto.

Peggio ancora, sembra assorbire TUTTE le dipendenze, incluse quelle opzionali, quindi ho un sacco di cose extra che non uso come ibatis e jfree. Tuttavia, quando aggiungo facoltativo = falso al modello di dipendenza, ricevo un avviso che nessuna dipendenza corrisponde al modello.

Ho iniziato a provare ad escludere le dipendenze uno per uno, ma dopo un'ora di inseguimento delle dipendenze ho deciso che doveva esserci un modo migliore.

Questa è l'attuale incarnazione del mio pom.xml. Qualcuno può aiutarmi a risolvere questo?

<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> 
    <artifactId>direct-parent</artifactId> 
    <groupId>com.edo.direct</groupId> 
    <version>1.0-SNAPSHOT</version> 
    <relativePath>../direct-parent</relativePath> 
</parent> 

<artifactId>direct-registration</artifactId> 
<packaging>bundle</packaging> 

<repositories> 
    <repository> 
     <id>wso2</id> 
     <url>http://dist.wso2.org/maven2/</url> 
    </repository> 
</repositories> 

<build> 
    <plugins> 

     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>2.3.5</version> 
      <extensions>true</extensions> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>bundle</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <excludeDependencies>*;scope=compile|runtime</excludeDependencies> 
       <ignoreMissingArtifacts>true</ignoreMissingArtifacts> 
       <instructions> 
        <Bundle-Vendor>edo Interactive</Bundle-Vendor> 
        <Bundle-SymbolicName>com.edo.direct.service</Bundle-SymbolicName> 
        <Export-Package> 
         com.edo.service;-split-package:=merge-first 
        </Export-Package> 
        <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency> 
        <Embed-Transitive>true</Embed-Transitive> 
        <Import-Package> 
         * 
        </Import-Package> 
        <Private-Package> 
         com.edo*;-split-package:=merge-first, 
        </Private-Package> 
        <Include-Resource> 
         {maven-resources} 
        </Include-Resource> 
        <Bundle-ClassPath>.,{maven-dependencies}</Bundle-ClassPath> 
       </instructions> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.9</version> 
      <configuration> 
       <includes> 
        <include>**/*Test.java</include> 
       </includes> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.5</version> 
      <executions> 
       <execution> 
        <id>add-source</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>src/main/groovy</source> 
         </sources> 
        </configuration> 
       </execution> 
       <execution> 
        <id>add-test-source</id> 
        <phase>generate-test-sources</phase> 
        <goals> 
         <goal>add-test-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>src/test/groovy</source> 
         </sources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.1</version> 
      <configuration> 
       <compilerId>groovy-eclipse-compiler</compilerId> 
       <verbose>true</verbose> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
      <dependencies> 
       <dependency> 
        <groupId>org.codehaus.groovy</groupId> 
        <artifactId>groovy-eclipse-batch</artifactId> 
        <version>1.8.0-03</version> 
       </dependency> 
       <dependency> 
        <groupId>org.codehaus.groovy</groupId> 
        <artifactId>groovy-eclipse-compiler</artifactId> 
        <version>2.5.1</version> 
        <exclusions> 
         <exclusion> 
          <groupId>org.codehaus.groovy</groupId> 
          <artifactId>groovy-eclipse-batch</artifactId> 
         </exclusion> 
        </exclusions> 
       </dependency> 
      </dependencies> 
     </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.codehaus.mojo</groupId> 
            <artifactId>build-helper-maven-plugin</artifactId> 
            <versionRange>[1.5,)</versionRange> 
            <goals> 
             <goal>add-source</goal> 
             <goal>add-test-source</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <execute /> 
           </action> 
          </pluginExecution> 
          <pluginExecution> 
           <pluginExecutionFilter> 
            <groupId>org.apache.maven.plugins</groupId> 
            <artifactId>maven-compiler-plugin</artifactId> 
            <versionRange>[2.3.1,)</versionRange> 
            <goals> 
             <goal>testCompile</goal> 
             <goal>compile</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <execute /> 
           </action> 
          </pluginExecution> 
          <pluginExecution> 
           <pluginExecutionFilter> 
            <groupId>org.codehaus.groovy</groupId> 
            <artifactId>groovy-eclipse-compiler</artifactId> 
            <versionRange>[2.5.1,)</versionRange> 
            <goals> 
             <goal>testCompile</goal> 
             <goal>compile</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <execute /> 
           </action> 
          </pluginExecution> 
         </pluginExecutions> 
        </lifecycleMappingMetadata> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

<name>direct-registration</name> 
<url>http://maven.apache.org</url> 

<properties> 
    <gmaven.version>1.3</gmaven.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.9</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.axis2.wso2</groupId> 
     <artifactId>axis2</artifactId> 
     <version>1.6.0.wso2v4</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.axis2</groupId> 
     <artifactId>axis2-kernel</artifactId> 
     <version>1.6-wso2v4</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.axis2</groupId> 
     <artifactId>axis2</artifactId> 
     <version>1.6.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.axis2</groupId> 
     <artifactId>axis2-kernel</artifactId> 
     <version>1.6.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.axis2</groupId> 
     <artifactId>axis2-spring</artifactId> 
     <version>1.6.0</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>3.0.5.RELEASE</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>3.0.5.RELEASE</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>3.0.5.RELEASE</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>3.0.5.RELEASE</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>3.0.5.RELEASE</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>3.0.5.RELEASE</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-asm</artifactId> 
     <version>3.0.5.RELEASE</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>3.0.5.RELEASE</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>3.0.5.RELEASE</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-ldap</artifactId> 
     <version>3.0.5.RELEASE</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 

    <dependency> 
     <groupId>org.grails</groupId> 
     <artifactId>grails-spring</artifactId> 
     <version>1.3.7</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>4.2.0.Final</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.6.5.Final</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-ehcache</artifactId> 
     <version>3.6.5.Final</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.0.Final</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 

    <dependency> 
     <groupId>postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.0-801.jdbc4</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.12.1.GA</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>cglib</groupId> 
     <artifactId>cglib</artifactId> 
     <version>2.2.2</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>net.sf.ehcache</groupId> 
     <artifactId>ehcache-core</artifactId> 
     <version>2.4.3</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 

    <dependency> 
     <groupId>com.google.collections</groupId> 
     <artifactId>google-collections</artifactId> 
     <version>1.0</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>commons-lang</groupId> 
     <artifactId>commons-lang</artifactId> 
     <version>2.6</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>2.0.1</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>commons-codec</groupId> 
     <artifactId>commons-codec</artifactId> 
     <version>1.5</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>1.6.2</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 

    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
     <version>1.1.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.5.10</version> 
     <scope>compile</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.5.10</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <version>1.5.10</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jul-to-slf4j</artifactId> 
     <version>1.5.10</version> 
     <scope>runtime</scope> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.geronimo.specs</groupId> 
     <artifactId>geronimo-osgi-locator</artifactId> 
     <version>1.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.geronimo.specs</groupId> 
     <artifactId>geronimo-jaxrs_1.1_spec</artifactId> 
     <version>1.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Project Dependencies --> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>direct-common</artifactId> 
     <version>${project.version}</version> 
    </dependency> 
</dependencies> 
</project> 

risposta