dependencia Maven intervalo de versiones

Number945:

Quiero entender la diferencia entre [3.8.2] vs 3.8.2 cuando se mencionan para la versión de nuestra dependencia.

A partir de aquí ,

Cuando se declara una versión "normal", como 3.8.2 para Junit, internamente esto se representa como "permitir que nada, pero prefieren 3.8.2." Esto significa que cuando se detecta un conflicto, Maven es permitido el uso de los algoritmos de conflictos para elegir la mejor versión. Si especifica [3.8.2], que significa que sólo se utilizará 3.8.2 y nada más. Si en otro lugar hay una dependencia que especifica [3.8.1], se llega a un fallo de construcción que le dice al conflicto. Señalamos esto para hacerle consciente de la opción, sino que lo utiliza con moderación y sólo cuando sea realmente necesario. La mejor forma de resolver esto es a través DependencyManagement.

Pero siento que algo está mal aquí.

si escribo <version>3.8.2</version>para nuestra dependencia y esa versión artefacto no está presente en nuestro repositorio Maven, entonces no está escogiendo cualquier otra cosa. Construir simplemente falla. Entonces, ¿por encima de ellos están diciendo - "permite que nada, pero prefieren 3.8.2"

Además, dicen - This means that when a conflict is detected,.... No soy capaz de entender esto. Lo que sea posible puede haber un conflicto que no surge de 3.8.2, pero se plantea para [3.8.2]?

JF Meier:

Todo esto funciona de la siguiente manera:

Paso 1: Maven construye un árbol de dependencias para su proyecto, incluyendo sus dependencias directas, sus dependencias, las dependencias de sus dependencias y así sucesivamente.

Paso 2: Ahora Maven hace una lista de todos los nodos. Si se encuentra con una dependencia en una sola versión (3.8.2 decir o [3.8.2]) que va a escoger sólo esa versión.

Paso 3: Si Maven encuentra más de una versión, comienza la magia.

  • Si todas las versiones son versiones sin soporte (como 3.8.2), que recoge el "más cercano" versión como se ha mencionado, en principio, la dependencia de la mediación.

  • Si usted tiene algunas (o todas son) rangos de versiones (como [1.0.0,2.0.0]) o versiones fijas (como [1.0.0]), entonces primero se encuentra la intersección de todas las versiones de las gamas / hormigón (Tenga en cuenta que no tiene en cuenta las versiones sin paréntesis aquí para encontrar esta intersección).

  • Si esta intersección se encuentra nula, generación falla. Si no es nulo, a continuación, se procede aún más por elige el intervalo de versiones / versión concreto / versión "más cercano".

  • Si por definición más cercana, obtenemos una versión intervalo de versiones / concreta, a continuación, selecciona experta en la reciente versión más disponible en la intersección resultante del intervalo de versiones encontradas.

  • Si por definición más cercana, obtenemos una versión (versión concreta no), entonces maven comprueba si esa versión está presente en la intersección resultante de la gama versión encontrada. En caso afirmativo, se selecciona esta versión. Si no es así, a continuación, selecciona experta en la reciente versión disponible en la mayoría de intersección resultante del intervalo de versiones (y no falla la acumulación).

La frase "permite que nada, pero prefieren 3.8.2" es, en el mejor engañosa. Maven no trata de compensar la falta de dependencias en el repositorio, sólo actúa de mediador "" versiones, si más de una versión se encuentra en el árbol de dependencias.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=363128&siteId=1
Recomendado
Clasificación