2011-02-11 8 views
10

estados de referencia POM de Maven lo siguiente:¿Es el alcance del 'sistema' de Maven transitivo, pero 'proporcionado' no?

proporcionado - esto es muy similar a la compilación, sino que indica que espera la JDK o un recipiente para proporcionar al tiempo de ejecución. Solo está disponible en el classpath de compilación y prueba , y no es transitivo.

...

sistema - este alcance es similar al proporcionado excepto que usted tiene que proporcionan el JAR que lo contiene explícitamente. El artefacto siempre está disponible y no se busca en un repositorio .

Ahora he convertido un proyecto con muchas dependencias de 'sistema' a 'proporcionado'. Sin embargo, parece que las dependencias del sistema son transitivas, lo que las hace muy poco similares a las que se ofrecen, y ahora están causando muchas dependencias faltantes en mi compilación. Mi pregunta es doble:

  1. ¿El alcance del sistema es transitivo? Si es así, ¿la referencia de Maven es incorrecta o está incompleta?
  2. ¿Hay alguna manera de hacer que las dependencias sean transitivas, sin empaquetarlas en el ensamblaje final?
+1

¿Qué quiere decir por "hacer dependencias transitivas"? (En cuanto al alcance del sistema, su justificación es "las dependencias del sistema son especialmente útiles para resolver dependencias en artefactos que ahora proporciona el JDK, pero que están disponibles como descargas separadas antes" ... eso no tiene ningún sentido para mí, ya que necesita para cambiar el POM una vez que es provisto por el JDK de todos modos, así que también podría cambiar el alcance a proporcionado.) –

+0

el alcance del 'sistema' es similar a' provided' ya que indica que la dependencia será proporcionada por algo más que Maven . –

Respuesta

2

Las dependencias transitivas siempre serán parte del ensamblaje. No hay un alcance para indicar su comportamiento intencionado.

La pregunta es: ¿Por qué un proyecto que se pretende incluir en otros proyectos (como usted indicó con la intención de tener dependencias transitivas) es un conjunto? Por lo general, un proyecto que tiene un ensamblaje WAR no se incluirá como dependencia en otros proyectos (las dependencias WAR no proporcionan sus dependencias transitorias en absoluto porque solo están destinadas a superposiciones WAR).

Si se trata de un ensamblaje de maven, esto es simple. El complemento Maven Assembly tiene "excluye" para filtrar los archivos que deben copiarse.

Si esto sería una guerra-Proyecto que podría excluir algunos archivos JAR de la guerra con estos excluye:

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <packagingExcludes>WEB-INF/lib/*-[toExclude1]-*.jar,WEB-INF/lib/[toExclude2]*.jar</packagingExcludes> 
    </configuration> 
</plugin> 
Cuestiones relacionadas