Как я могу обнаружить maven 2 jar зависимости? - PullRequest
2 голосов
/ 29 июля 2010

Я добавил несколько jar-файлов в качестве зависимостей в pom.xml, но, похоже, некоторые из них бесполезны, потому что эти jar-файлы уже были загружены с использованием механизма зависимостей ...

Есть ли способ увидеть эти "встроенные-in "зависимости, чтобы я мог добавить только необходимые зависимости в свой pom.xml?

Например, если я добавляю зависимость hibernate в pom.xml, то для cglib не требуется.

Ответы [ 5 ]

3 голосов
/ 29 июля 2010

Не делайте этого - перечислите все зависимости вашего кода, но не от используемых вами библиотек;Maven выполнит переходную зависимость и позаботится о них.

2 голосов
/ 29 июля 2010

вы можете запустить mvn dependency:tree, чтобы получить все дерево, включая временные зависимости, которые включаются в ваш проект.Там вы можете начать искать

Надеюсь, что помог

1 голос
/ 29 июля 2010

Во-первых, посмотрите Транзитивные зависимости :

Транзитивные зависимости - это новая функция в Maven 2.0.Это позволяет избежать необходимости обнаруживать и указывать библиотеки, которые требуются для ваших собственных зависимостей, и включать их автоматически.

Тогда хороший анализатор зависимостей поможет ...

mvn Командная строка - ваша первая помощь:

mvn dependency:tree

Иногда вам нужно выяснить, откуда пришли номера версий (см. Также: Управление зависимостями ).Здесь вам нужно будет раскрыть родительские отношения, и в этом вам поможет команда «ffective-pom »:

mvn help:effective-pom

Также полезна поддержка инструментов ...

m2eclipse имеет вкладку Дерево зависимостей , которая показывает, как сворачиваются различные иерархии:

1028 * альтернативный текст http://www.sonatype.com/books/m2eclipse-book/reference/figs/web/eclipse_pom-editor-depend-tree.png

IntelliJ имеетеще один интересный вид, позволяющий обнаруживать конфликты :

альтернативный текст http://blogs.jetbrains.com/idea/wp-content/uploads/2010/05/3.png

0 голосов
/ 30 июля 2010

Есть ли способ просмотреть эти "встроенные" зависимости, чтобы я мог добавить только необходимые зависимости в свой pom.xml?

Нет встроенных зависимостей. Однако при объявлении зависимости от данного артефакта Maven также будет извлекать зависимости этой зависимости транзитивно. Такие зависимости называются 3.4.4. Переходные зависимости :

Транзитивная зависимость - это зависимость зависимости. Если project-a зависит от project-b, что, в свою очередь, зависит от project-c, тогда project-c считается транзитивной зависимостью project-a. Если project-c зависит от project-d, то project-d также будет считаться транзитивной зависимостью project-a.

Так что если вам нужна зависимость в вашем проекте, просто объявите ее (и зависимости этой зависимости будут переходными).

Для визуализации дерева зависимостей проекта лучшим инструментом является mvn dependency:tree (или любой другой интерфейс, предлагаемый вашей любимой IDE). Это обязательный инструмент для анализа ваших зависимостей и проверки их на предмет правильной конвергенции и потенциальных конфликтов, приводящих к использованию ожидаемой версии.

Например, если я добавлю hibernate-зависимость в pom.xml, то для cglib она не нужна.

На самом деле, это плохой пример, cglib является необязательным зависимостью Hibernate Core, которая объявляется в pom.xml:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-cglib-repack</artifactId>
  <version>2.1_3</version>
  <optional>true</optional><!-- think of it as "excluded by default" -->
</dependency>

Hibernate дает вам выбор между javassist и cglib, вы сами решаете, какой из них использовать, и объявляете его явно, следовательно, необязательный статус.

Смотри также

0 голосов
/ 29 июля 2010

Если вы используете Eclipse, вы видите визуальное дерево зависимостей, которое генерируется автоматически.При добавлении зависимости, если вы не хотите, чтобы она автоматически извлекала некоторые транзитивные зависимости, используйте тег исключения, например, так:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate</artifactId>
  <version>${hibernate.version}</version>
  <exclusions>
    <exclusion>
      <groupId>asm</groupId>
      <artifactId>asm</artifactId>
    </exclusion>
    <exclusion>
      <groupId>asm</groupId>
      <artifactId>asm-attrs</artifactId>
    </exclusion>
    <exclusion>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
    </exclusion>
  </exclusions>
</dependency>

Существуют некоторые известные конфликты при использовании определенных версий hibernate и AOP из-за cglib.

...