Список файлов jar зависимостей в Maven - PullRequest
56 голосов
/ 10 ноября 2008

Используя Maven 2, есть ли способ, которым я могу перечислить зависимости jar как просто имена файлов?

mvn dependency:build-classpath 

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

Так что список, который мне нужен, будет выглядеть примерно так:

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

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

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

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

Ответы [ 8 ]

68 голосов
/ 14 мая 2010

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

$ mvn dependency:tree

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

17 голосов
/ 02 апреля 2009

Насколько я могу судить, вы не можете получить именно такой вывод, с запятыми и без пробелов. И через командную строку, и через файл 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 phase и , чтобы фильтровать этот ресурс позже, устанавливая правильное свойство на process-resources phase жизненного цикла, вы должны сможет получить только запятую.

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

8 голосов
/ 24 ноября 2017

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

$ mvn dependency:tree

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

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

$ mvn dependency:tree | findstr javax.persistence

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

$ mvn dependency:tree | grep javax.persistence

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

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

Maven way (Windows PowerShell):

$ mvn dependency:tree '-Dincludes=javax.persistence:*'
5 голосов
/ 10 ноября 2008

Вы смотрели на проект 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>
4 голосов
/ 30 марта 2018

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

mvn dependency:list

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

2 голосов
/ 09 января 2010

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

Ant может сделать это для вас без проблем, как и скрипт оболочки.

2 голосов
/ 10 ноября 2008

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

Это конфигурация подключаемого модуля архива Maven.

1 голос
/ 16 августа 2013

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

...