Список файлов jar зависимостей в Maven

Можно ли, используя Maven 2, перечислить зависимости jar только в виде имен файлов?

mvn dependency:build-classpath 

может перечислить файлы jar, но это будет включать полный путь к их местоположению в моем локальном репозитории. По сути, мне нужен просто список имен файлов (или имен файлов, которые были скопированы с помощью цели copy-dependencies).

Итак, список, который мне нужен, будет примерно таким

activation-1.1.jar,antlr-2.7.6.jar,aopalliance-1.0.jar etc...

в идеале как свойство maven, но я думаю, подойдет такой файл, как build-classpath.

Я пытаюсь написать Bundle-ClassPath в файл MANIFEST.MF, поддерживаемый вручную, для пакета OSGi. (Вам не нужно понимать этот бит, чтобы ответить на вопрос.)

Чтобы уточнить: вопрос заключается в не о том, как записать заголовки манифеста в файл MANIFEST.MF в банке (это легко можно использовать в Google). Я спрашиваю, как получить данные, которые я хочу написать, а именно список, показанный выше.


person Sindri Traustason    schedule 10.11.2008    source источник
comment
просто отправьте патч для плагина зависимостей, и я применю его к следующему выпуску. Путь к классам сборки наиболее близок к тому, что вы хотите, нам просто нужно настроить параметры, чтобы получить желаемый результат.   -  person Brian Fox    schedule 19.04.2009
comment
Здорово. ищет то же самое !!!   -  person anand krish    schedule 08.03.2021


Ответы (9)


Эта команда сгенерирует дерево зависимостей вашего проекта maven:

$ mvn dependency:tree

Уверен, что результат вам понравится :-)

person Anis    schedule 14.05.2010
comment
отличный. Я много искал, чтобы получить список всех зависимостей maven - person anand krish; 08.03.2021

Насколько я могу судить, вы не можете получить именно такой результат с запятыми и без пробелов. И через командную строку, и через файл pom.xml, maven-dependency-plugin или CLI нервничают, если вы указываете пробелы или '' (пустую строку) в качестве замены с помощью pathSeparator или fileSeparator. Таким образом, вы можете быть вынуждены пойти на компромисс. Ты сможешь

    mvn dependency:build-classpath -Dmdep.pathSeparator=":" -Dmdep.prefix='' -Dmdep.fileSeparator=":" -Dmdep.outputFile=classpath

Тем не менее, это должно дать вам полный список, разделенный '::', а не просто ',', но это работает. Если вы запустите:

    mvn dependency:build-classpath -Dmdep.pathSeparator="@REPLACEWITHCOMMA" -Dmdep.prefix='' -Dmdep.fileSeparator="@" -Dmdep.outputFile=classpath

и прикрепите это к generate-resources фазе и отфильтруйте этот ресурс позже, установив правильное свойство на process-resources фазе жизненного цикла, вы должны иметь возможность чтобы получить только запятую.

Вы можете увидеть полный список параметров по адресу: http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html

person Gabe Mc    schedule 02.04.2009
comment
Отличный ответ! Если вы используете -Dmdep.pathSeparator = ',' -Dmdep.prefix = '.'. -Dmdep.fileSeparator = '/' вы получаете разделенный запятыми список относительных имен файлов а-ля ./file1.jar,./file2.jar, что позволяет избежать необходимости фильтрации. - person Eero; 26.11.2010

Вот команда, которую вы просите

$ mvn dependency:tree

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

Вот как можно фильтровать вывод в Windows:

$ mvn dependency:tree | findstr javax.persistence

А вот как это можно сделать в Linux:

$ mvn dependency:tree | grep javax.persistence

Maven способ отфильтровать дерево зависимостей (работает в Windows cmd, MacOS и Linux shell):

$ mvn dependency:tree -Dincludes=javax.persistence:*

Способ Maven (Windows PowerShell):

$ mvn dependency:tree '-Dincludes=javax.persistence:*'
person naXa    schedule 24.11.2017

На самом деле, только для окончательного списка банок просто используйте

mvn dependency:list

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

Вот документ с дополнительными параметрами

person kisna    schedule 30.03.2018
comment
И если вы хотите их отсортировать: mvn dependency:list -Dsort=true - person mgarde; 24.04.2019

Вы смотрели проект Apache Felix? В нем есть множество плагинов, включая плагин пакета ., который должен делать то, что вы хотите.

Кроме того, пробовали ли вы использовать тег <addClasspath> с <manifestFile>? Это должно иметь желаемый эффект объединения пути к классам в ваш манифест.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  ...
  <configuration>
    <archive>
      <addClasspath>true</addClasspath>
      <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
    </archive>
  </configuration>
  ...
</plugin>
person sblundy    schedule 10.11.2008
comment
Я знаю об Apache Felix, но он не делает то, что мне нужно, поэтому я делаю это вручную. - person Sindri Traustason; 11.11.2008
comment
addClasspath добавит список jar-файлов в заголовок манифеста Class-Path, я не вижу, чтобы в документации maven-jar-plugin упоминалась возможность поместить путь к классу в другие заголовки. Также Bundle-Classpath требует больше, чем просто список jar-файлов. - person Sindri Traustason; 11.11.2008

Возможно, мне здесь что-то не хватает, но, поскольку вы уже использовали зависимости копирования, похоже, что на самом деле вам нужен просто список файлов в указанном каталоге.

Ant может сделать это за вас без каких-либо проблем, как и сценарий оболочки.

person Kevin Wright    schedule 09.01.2010
comment
Я согласен, я только что сделал это. - person Matthieu; 02.09.2019

Maven может автоматически создать путь к классам в вашем манифесте: http://maven.apache.org/guides/mini/guide-manifest.html

Это конфигурация плагина архива Maven.

person Davide Gualano    schedule 10.11.2008

Чтобы добавить отметку к существующим ответам, текущий плагин maven-dependency-plugin позволяет сохранить путь к классу к свойству с помощью _ 1_ параметр.

person Andrew    schedule 16.08.2013

Вот сценарий awk для передачи mvn dependency:list по конвейеру:

mvn dependency:list | awk -f mvnfmt.awk

Вы можете | sort, если хотите отсортировать по имени, или | tr '\n' ':', чтобы отформатировать его в путь к классам.

mvnfmt.awk is:

BEGIN {
    found = 0
}

/The following files have been resolved/ {
    found = 1
    next
}

/^\[INFO\] \$/ {
    print "Empty " found
    if (found != 0) found = 0
}

{
    if (!found) next
    n = split($0, a, " ")
    if (n != 2) {
        found = 0
        next
    }
    split(a[2], a, ":")
    print a[2] "-" a[4] "." a[3]
}   
person Matthieu    schedule 02.09.2019