2011-03-29 17 views
6

Estoy desarrollando una aplicación que usa la base de datos Cassandra NoSQL y estoy agregando una interfaz web. Tengo 2 proyectos: acceso a cassandra (este proyecto es DAL) y web (este proyecto es una aplicación web).Dependencias transitivas de terceros con Maven

El escenario es simple enaugh. Cassandra-access tiene dependencias en hector.jar que no está en el repositorio de maven. Por lo que añade esta dependencia a mi repositorio local a través de mvn instalar: la instalación de archivos y listo mi repositorio en pom padres:

<repositories> 
     <repository> 
     <id>loc</id> 
     <url>file://${basedir}/../mvn-local-repository</url> 
    </repository> 
</repositories> 

En proyectos Web POM añadí dependencia de Cassandra de acceso. Pero cuando inicio la aplicación web con hello world, leo de la base de datos obtengo la excepción classNotFound como si hector.jar no estuviera en la ruta de la clase. Cuando escribo mvn clean install, la guerra resultante del proyecto web no incluye hector.jar en WEB-INF/lib. Eso confirma mi teoría.

¿Cómo lograr que la guerra llegue a todas las dependencias transitivas? Pensé que todas las dependencias que están en alcance compilar (que es el predeterminado) se copiarán.

proyectos Web pom:

<dependency> 
     <groupId>net.product</groupId> 
     <artifactId>cassandra-access</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 

Cassandra acceso pom:

<dependency> 
    <groupId>me.prettyprint</groupId> 
    <artifactId>hector</artifactId> 
    <version>0.7.0</version> 
</dependency> 
+0

He encontrado que el texto anterior funciona así. Acabo de recibir ADVERTENCIAS en POM que hace que maven NO INCLUYA DEPENDENCIAS TRANSITORIAS. La mejor manera de depurar una situación así es usar la dependencia mvn: tree -X –

Respuesta

1

Es tal vez no es la solución óptima, pero funciona para mí: poner el frasco hector en el directorio lib de la acceso a cassandra. añadir a la pom cassandra de acceso:

<dependency>  
    <groupId>%HECTOR_JAR_GROUP_ID%</groupId> 
    <artifactId>%HECTOR_JAR_ARTIFACT_ID%</artifactId> 
    <version>%HECTOR_JAR_VERSION%</version> 
    <scope>system</scope> 
     <systemPath>${basedir}/lib/%HECTOR_JAR_NAME%</systemPath> 
</dependency> 

continuación, agregue el siguiente plugin:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/lib</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
Cuestiones relacionadas