Зависимость Maven: дерево не показывает все транзитивные зависимости - PullRequest
0 голосов
/ 17 марта 2020

Я пытался разобрать некоторые деревья зависимостей через maven dependency:tree и обнаружил несколько интересных случаев:

Я сделал пом. xml для установки org.glassfish.jersey.containers:jersey-container-servlet:2.19, вот содержимое:

<project> 
  <modelVersion>4.0.0</modelVersion> 
  <groupId> fake_id </groupId> 
  <artifactId> fake_id </artifactId> 
  <version>1.0.0</version> 
  <dependencies> 
    <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.19</version> 
    </dependency> 
  </dependencies> 
</project>

Перед установкой этого пакета я удалил все папки в /home/${user}/.m2/repository на случай, если на результат повлияет существующая среда. Затем я запустил mvn dependency:tree -Dverbose, я получил следующее дерево зависимостей:

fake_id:fake_id:jar:1.0.0
[INFO] \- org.glassfish.jersey.containers:jersey-container-servlet:jar:2.19:compile
[INFO]    +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.19:compile
[INFO]    |  +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile
[INFO]    |  +- (org.glassfish.jersey.core:jersey-common:jar:2.19:compile - omitted for duplicate)
[INFO]    |  +- (org.glassfish.jersey.core:jersey-server:jar:2.19:compile - omitted for duplicate)
[INFO]    |  \- (javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile - omitted for duplicate)
[INFO]    +- org.glassfish.jersey.core:jersey-common:jar:2.19:compile
[INFO]    |  +- (javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile - omitted for duplicate)
[INFO]    |  +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO]    |  +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.19:compile
[INFO]    |  +- org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile
[INFO]    |  |  +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b25:compile
[INFO]    |  |  \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b25:compile
[INFO]    |  +- (org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  +- org.glassfish.hk2:hk2-locator:jar:2.4.0-b25:compile
[INFO]    |  |  +- (org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2:hk2-utils:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO]    |  \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
[INFO]    +- org.glassfish.jersey.core:jersey-server:jar:2.19:compile
[INFO]    |  +- (org.glassfish.jersey.core:jersey-common:jar:2.19:compile - omitted for duplicate)
[INFO]    |  +- org.glassfish.jersey.core:jersey-client:jar:2.19:compile
[INFO]    |  |  +- (javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.jersey.core:jersey-common:jar:2.19:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  \- (org.glassfish.hk2:hk2-locator:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  +- (javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile - omitted for duplicate)
[INFO]    |  +- org.glassfish.jersey.media:jersey-media-jaxb:jar:2.19:compile
[INFO]    |  |  +- (org.glassfish.jersey.core:jersey-common:jar:2.19:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2:hk2-locator:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  \- (org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile - omitted for duplicate)
[INFO]    |  +- (javax.annotation:javax.annotation-api:jar:1.2:compile - omitted for duplicate)
[INFO]    |  +- (org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  +- (org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  +- (org.glassfish.hk2:hk2-locator:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  \- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO]    \- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile

Однако оба org.glassfish.hk2:hk2-api:2.4.0-b25 и org.glassfish.hk2:hk2-utils:2.4.0-b25 имеют прямую зависимость от javax.inject:javex.inject, но javax.inject:javex.inject не отображалось в выходном дереве зависимостей. Раздел зависимостей в двух pom.xml выглядит следующим образом:

...
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</dependency>
...

Чтобы проверить, была ли javax.inject:javax.inject реальной зависимостью в дереве, я удалил папку /home/${user}/.m2/javax/inject в случае и снова запустил mvn dependency:tree -Dverbose и я обнаружил, что он действительно загрузил javax.inject:javax.inject:1 снова, вот журнал.

[INFO] Building fake_id 1.0.0
[INFO] ------------------------------------------------------------------------
Downloading: https://repo.maven.apache.org/maven2/javax/inject/javax.inject/1/javax.inject-1.pom
Downloaded: https://repo.maven.apache.org/maven2/javax/inject/javax.inject/1/javax.inject-1.pom (612 B at 0.5 KB/sec)
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ fake_id ---
[INFO] fake_id:fake_id:jar:1.0.0
[INFO] \- org.glassfish.jersey.containers:jersey-container-servlet:jar:2.19:compile
[INFO]    +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.19:compile
[INFO]    |  +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile
[INFO]    |  +- (org.glassfish.jersey.core:jersey-common:jar:2.19:compile - omitted for duplicate)
[INFO]    |  +- (org.glassfish.jersey.core:jersey-server:jar:2.19:compile - omitted for duplicate)
[INFO]    |  \- (javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile - omitted for duplicate)
[INFO]    +- org.glassfish.jersey.core:jersey-common:jar:2.19:compile
[INFO]    |  +- (javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile - omitted for duplicate)
[INFO]    |  +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO]    |  +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.19:compile
[INFO]    |  +- org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile
[INFO]    |  |  +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b25:compile
[INFO]    |  |  \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b25:compile
[INFO]    |  +- (org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  +- org.glassfish.hk2:hk2-locator:jar:2.4.0-b25:compile
[INFO]    |  |  +- (org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2:hk2-utils:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO]    |  \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
[INFO]    +- org.glassfish.jersey.core:jersey-server:jar:2.19:compile
[INFO]    |  +- (org.glassfish.jersey.core:jersey-common:jar:2.19:compile - omitted for duplicate)
[INFO]    |  +- org.glassfish.jersey.core:jersey-client:jar:2.19:compile
[INFO]    |  |  +- (javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.jersey.core:jersey-common:jar:2.19:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  \- (org.glassfish.hk2:hk2-locator:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  +- (javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile - omitted for duplicate)
[INFO]    |  +- org.glassfish.jersey.media:jersey-media-jaxb:jar:2.19:compile
[INFO]    |  |  +- (org.glassfish.jersey.core:jersey-common:jar:2.19:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  +- (org.glassfish.hk2:hk2-locator:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  |  \- (org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile - omitted for duplicate)
[INFO]    |  +- (javax.annotation:javax.annotation-api:jar:1.2:compile - omitted for duplicate)
[INFO]    |  +- (org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  +- (org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  +- (org.glassfish.hk2:hk2-locator:jar:2.4.0-b25:compile - omitted for duplicate)
[INFO]    |  \- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO]    \- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.439 s
[INFO] Finished at: 2020-03-17T14:58:44+08:00
[INFO] Final Memory: 20M/596M

Насколько я исследовал, я не нашел никаких других ограничений на javax.inject:javax.inject (таких как исключение) , опция, и т. д. c.). Итак, я хочу спросить, почему javax.inject:javax.inject игнорируется mvn dependency:tree, и является ли это каким-либо решением, которое я могу получить этот пакет в дереве зависимостей?

Спасибо за ваше время и добрый ответ!

Чтобы подвести итог без -Dverbose:

[INFO] Building fake_id 1.0.0
[INFO] ------------------------------------------------------------------------
Downloading: https://repo.maven.apache.org/maven2/javax/inject/javax.inject/1/javax.inject-1.pom
Downloaded: https://repo.maven.apache.org/maven2/javax/inject/javax.inject/1/javax.inject-1.pom (612 B at 0.5 KB/sec)
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ fake_id ---
[INFO] fake_id:fake_id:jar:1.0.0
[INFO] \- org.glassfish.jersey.containers:jersey-container-servlet:jar:2.19:compile
[INFO]    +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.19:compile
[INFO]    |  \- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b25:compile
[INFO]    +- org.glassfish.jersey.core:jersey-common:jar:2.19:compile
[INFO]    |  +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO]    |  +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.19:compile
[INFO]    |  +- org.glassfish.hk2:hk2-api:jar:2.4.0-b25:compile
[INFO]    |  |  +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b25:compile
[INFO]    |  |  \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b25:compile
[INFO]    |  +- org.glassfish.hk2:hk2-locator:jar:2.4.0-b25:compile
[INFO]    |  |  \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO]    |  \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
[INFO]    +- org.glassfish.jersey.core:jersey-server:jar:2.19:compile
[INFO]    |  +- org.glassfish.jersey.core:jersey-client:jar:2.19:compile
[INFO]    |  +- org.glassfish.jersey.media:jersey-media-jaxb:jar:2.19:compile
[INFO]    |  \- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO]    \- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

1 Ответ

0 голосов
/ 17 марта 2020

Описание опции verbose гласит (https://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html):

Включать ли пропущенные узлы в сериализованное дерево зависимостей. Обратите внимание, что эта функция на самом деле использует алгоритм Maven 2 и может давать неверные результаты при использовании с Maven 3

...