2010-11-19 18 views
21

¿Crees que es una buena práctica eliminar todas las dependencias transitivas que se pueden encontrar en un maven pom?Maven: ¿Debo conservar o eliminar las dependencias declaradas que también son dependencias transitivas?

Ejemplo:
Mi proyecto depende de A y B.
B también es una dependencia transitiva de A.
¿Debo mantener B en mi pom o quitarla?

¿Cuál es la mejor:
teniendo todas las jarras conocidas, incluso las transitivas, declaradas en la pom o manteniendo solo las jarras de nivel superior?

Esto es un poco subjetivo, pero estoy tratando de limpiar algunos pomos enormes (padres e hijos) con muchas dependencias transitivas. Quiero mantener mi pom lo más simple posible, pero también quiero que sean mantenibles.

Respuesta

19

Si su proyecto tiene dependencias directas en B, debe mantenerlo incluso si B es una dependencia transitiva de A. Puede ser que en la próxima versión A no use B y tendrá que reestructurar el pomo .xml.

En general, las dependencias de Maven deben reflejar las dependencias lógicas del proyecto.

+0

Gracias por la respuesta y el enlace. Me gusta este consejo: 'reflejar las dependencias lógicas del proyecto' – Guillaume

+0

¿No crees que deberías hacer una distinción aquí entre dependencias internas y externas? Tenía una pregunta similar: http://stackoverflow.com/questions/20800571/are-herehere-any-reasons-to-keep-explicit-dependency-declaration-for-my-own-transit Todavía no puedo ver un motivo Por qué debería molestarme en declarar todas las dependencias entre mis propios módulos. Si las API cambian y el proyecto no puede compilar, lo arreglaré y lo más probable es que mejore el mantenimiento del código en el camino :) –

+0

¿Cómo se relaciona el enlace con la pregunta/respuesta? –

11

me habría prefieren a evitar la declaración de las dependencias transitivas, y explícitamente incluirlos en el pom ellos si hay una buena razón para ello. Aquí están mis argumentos:

  • Trato de mantener el pom lo más simple posible. Con las dependencias transitivas declaradas, incluso si se usan explícitamente, Maven pom se vuelve más detallado.

Al declarar las dependencias transitivas (incluso si explícitamente los necesita):

  • redundancia en la declaración se introduce, ya que esta información ya está en el descriptor del pom de la artefacto que es obligatorio.

  • Si hay una nueva versión del artefacto requiere no depende de la transitive dependency más, usted tiene que quitar el transitive dependency de su ensamblaje a sí mismo, si es que transitive dependency se declara explícitamente.

  • La información para la transitividad se manipula al declarar explícitamente la dependencia transitiva.

Tendría sentido para incluir una dependencia explícita en el siguiente caso:

  • Tiene uno de dos dependencias, dice C y D, que requieren diferentes versiones de la dependencia transitiva B (o necesita una versión específica de B en su proyecto).En este caso, debe elegir una versión de B y definir explícitamente la dependencia transitiva T. (*)

Conclusión: me gustaría tratar de evitar la declaración, a menos que tenga sentido para declarar el artefacto específicamente (como en el caso (*)).

+0

Si desea participar en la discusión similar: http://stackoverflow.com/questions/20800571/are-herehere-any-rasons-to-keep-explicit-dependency-declaration-for-my-own-transit –

Cuestiones relacionadas