2011-05-02 28 views
27

Maven está un poco sobre mi cabeza a veces ... He creado una biblioteca que tiene una dependencia opcional en slf4j y en log4j. Por opcional, quiero decir:dependencia "opcional" con alcance "provisto" en Maven

  • Mi biblioteca necesita esos marcos de tala en tiempo de compilación
  • Mi biblioteca no los necesita en tiempo de ejecución, pero si se "descubre" ellos, que se les utilice

Actualmente, me han marcado que la dependencia como "opcional" y "siempre":

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.16</version> 
    <type>jar</type> 
    <scope>provided</scope> 
    <optional>true</optional> 
</dependency> 

Pero algunos de mis usuarios han informado de problemas, ya que no necesitan log4/slf4j. ¿Mi dependencia es correcta? Desafortunadamente, encuentro que la documentación oficial es demasiado abstracta para entender este problema.

Respuesta

30

Revisó this documentación. Describe muy bien tu caso de uso. Marcar dependencias como opcional no las resolverá como dependencias transitivas en la aplicación que usa su biblioteca (incluso si el alcance es compile).

En diferencia a <scope>provided</scope> que se usa para dependencias requeridas cuales serán proporcionados por el entorno de ejecución de una dependencia <optional>true</optional> no está necesariamente destinado a ser requerida (La idea es que algunas de las dependencias sólo se utilizan para ciertas características en el proyecto, y no será necesario si esa característica no se utiliza.).

Si un proyecto que utiliza su biblioteca utilizará cualquier funcionalidad proporcionada por las dependencias opcionales, el proyecto tiene que declarar estas dependencias por su cuenta.

Como su configuración parece ser la correcta para mí, no sé la razón por la que se producen las fallas. Tal vez sus dependencias opcionales sean resueltas por otras bibliotecas en versiones que no espera. Eso, por supuesto, podría causar problemas.

Cuestiones relacionadas