¿Cuál es la diferencia entre estos ámbitos de dependencia de Maven: proporcionado/compilar/sistema/importar?

Resuelto Programming Noob asked hace 11 años • 1 respuestas

He leído la documentación y tengo cierta comprensión.

Por favor corríjame o infórmeme de la verdad; según tengo entendido:

  • provided
    Las dependencias deben estar en la máquina en la que ejecuta el código y deben incluirse en la ruta

  • compile
    Las dependencias no estarán en la máquina que ejecuta el código, así que inclúyalas en la compilación.

  • system
    Exactamente lo mismo que se proporciona, pero necesita que las dependencias estén estrictamente presentes en un archivo jar.

  • import
    Parece que debería importar las dependencias de algún otro archivo POM, pero no sé cómo ni por qué, por lo que agradecería un poco de explicación.

Programming Noob avatar Jun 04 '13 06:06 Programming Noob
Aceptado

Proporcionado significa: "Este archivo jar debe compilarse localmente, pero otra cosa lo proporcionará en el classpath durante el tiempo de ejecución, así que no lo incluya en el classpath por mí". Por ejemplo, todos los contenedores web (p. ej.: tomcat) incluyen archivos jar para servlets. Debería utilizar providedfor las clases de servlet para poder compilar su código localmente, pero no desea anular las clases de servlet que Tomcat le proporciona cuando implementa en él.


systemsignifica "Estas dependencias están en mi sistema y quiero señalarlas directamente". Desea evitar esto si puede, porque otra persona en otra computadora no necesariamente tendrá estas dependencias.

La diferencia entre providedes más fácil de mostrar:

<dependency>
  <groupId>javax.sql</groupId>
  <artifactId>jdbc-stdext</artifactId>
  <version>2.0</version>
  <scope>system</scope>
  <systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>

¿Ves cómo tiene eso <systemPath>? Esa es la diferencia. No especifica la ruta con provided, siempre que sepa cómo obtener la dependencia de un repositorio. systemlo obtiene únicamente de su sistema de archivos.


Ni siquiera he oído hablar de import. @JigarJoshi vinculado a http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html que dice

importar (solo disponible en Maven 2.0.9 o posterior)

Este alcance solo se usa en una dependencia de tipo pom en la <dependencyManagement>sección. Indica que el POM especificado debe reemplazarse con las dependencias en la sección de ese POM. Dado que son reemplazadas, las dependencias con un alcance de importación en realidad no participan en la limitación de la transitividad de una dependencia.

Creo que esto quiere decir "tome todas las dependencias que tiene este proyecto e inclúyalas en esta <dependencyManagement>sección". Que alguien me corrija si me equivoco.

Daniel Kaplan avatar Jun 03 '2013 23:06 Daniel Kaplan