Подтвердить что ты не робот

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

Используя 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). Я спрашиваю о том, как получить данные, которые я хочу написать, а именно список, показанный выше.

4b9b3361

Ответ 1

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

$ mvn dependency:tree

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

Ответ 2

Насколько я могу судить, вы не можете получить именно этот вывод с запятыми и без пробелов. Как через командную строку, так и через файл pom.xml плагин maven-dependency или 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

Ответ 3

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

$ mvn dependency:tree

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

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

$ mvn dependency:tree | findstr javax.persistence

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

$ mvn dependency:tree | grep javax.persistence

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

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

Maven way (Windows PowerShell):

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

Ответ 4

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

mvn dependency:list

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

Ответ 5

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

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

<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>

Ответ 6

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

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

Ответ 8

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

Ответ 9

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

mvn dependency:list | awk -f mvnfmt.awk

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

mvnfmt.awk это:

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]
}