Есть ли maven-эквивалент rpm - whatprovides для файла jar? - PullRequest
4 голосов
/ 30 июня 2010

Как мне использовать maven или другой инструмент, чтобы найти, какую зависимость зависимости предоставляет конкретный jar?Иногда они имеют три или четыре зависимости.

Ответы [ 4 ]

2 голосов
/ 30 июня 2010

Если вы хотите выяснить, откуда приходит транзитивная зависимость от для данного проекта , тогда плагин Maven Dependency действительно ваш друг. Используйте его с параметром includes, который позволяет указывать список артефактов через запятую, чтобы фильтровать сериализованное дерево зависимостей, или null, чтобы не фильтровать дерево зависимостей. Синтаксис артефакта определяется как StrictPatternIncludesArtifactFilter.

О синтаксисе javadoc пишет:

Синтаксис шаблона артефакта имеет форма

[groupId]:[artifactId]:[type]:[version]

Где каждый сегмент шаблона является необязательным и поддерживает полное и частичное * подстановочные знаки. Пустой Сегмент шаблона рассматривается как неявный подстановочный знак.

Например, org.apache.* будет соответствовать всем артефактам, чей идентификатор группы началось с org.apache. и :::*-SNAPSHOT будет соответствовать всем артефакты снимка.

Вот пример (я хочу найти, откуда исходит артефакт activation проекта):

$ mvn dependency:tree -Dincludes=:activation::
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Java EE 6 Demo - Petstore - Domain
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] name.thivent.samples.javaee6.domain:domain:jar:1.0-SNAPSHOT
[INFO] \- org.hibernate:hibernate-validator:jar:4.0.2.GA:runtime
[INFO]    \- javax.xml.bind:jaxb-api:jar:2.1:runtime
[INFO]       \- javax.activation:activation:jar:1.1:runtime
[INFO] ------------------------------------------------------------------------
...

M2Eclipse предоставляет хороший интерфейс для dependency:tree, если вы его используете.

Для чего-то «ближе» к rpm --whatprovides (т. Е. Без поиска конкретного проекта) вам придется использовать поисковую систему хранилища . Вот пример для активации-1.1.jar (см. Этот артефакт используется в ... разделе).

2 голосов
/ 30 июня 2010

Полагаю, вы ищете:

mvn dependency:tree

Редактировать: для анализа зависимостей доступны дополнительные параметры. Взгляните на документацию

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

Это не прямой ответ, но может помочь, если вы используете Eclipse с плагином Maven.

Если я хочу найти источник класса, я делаю следующее:

  1. Выберите имя класса и используйте ярлык F3 для загрузки исходного кода в окно редактора.
  2. Используйте команду «Показать в> Обозреватель пакетов», чтобы найти файл в (обычно) разделе «Зависимости Maven» пути сборки.
  3. Посмотрите имя файла JAR вложенной зависимости "папка" и считайте идентификатор группы, идентификатор артефакта и версию.

(Это может быть не на 100% надежно в многомодульном проекте, если вы используете поддержку вложенных модулей Eclipse Maven. Но на практике я не сталкивался с проблемами.)

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

Даже для прямых зависимостей в Java это как минимум сложная задача. Не все зависимости являются статическими и могут быть отражены из файла класса. И даже для этих классов нет способа получить правильную библиотеку, необходимую для удовлетворения этой зависимости.

Например, у нас есть Class.forName(String className) способ добавления динамических зависимостей, и имя класса можно записать в файл ресурса или свойств или создать во время выполнения. И названный класс может затем ввести зависимость для другой библиотеки.

Я сомневаюсь, что любой инструмент способен разрешить все эти зависимости.

...