Я работаю над большими проектами со многими файлами pom.xml, и мне нужно указать все библиотеки, которые я использую. Это означает, что мне нужно прочитать pom.xml файлы рекурсивно и получить groupId, artifactId, область и версию. Я проверил mvn зависимость: дерево, но я не могу найти способ распечатать его в файл в читаемом формате. Я видел appendOutput, но я не видел примера о том, как использовать его в cmd. Я видел некоторые решения, сделанные в Linux, но у меня только есть доступ к Windows XP.
Как получить зависимости Maven в файле в читаемом формате?
Ответ 1
Это можно (по крайней мере сейчас) выполнить с параметрами командной строки в плагине зависимости: tree.
Try:
mvn dependency:tree -Doutput=/path/to/file
Ссылка: Страница плагина зависимостей Maven
Вы только задали вопрос о "читаемом" формате, но вы также можете передать параметр -DoutputType с различными параметрами. Также обратите внимание, что версия, которую я установил, получает следующее предупреждение:
[WARNING] The parameter output is deprecated. Use outputFile instead.
Итак, рассмотрите попытку с помощью -DoutputFile =/path/to/file
Кроме того, мне не удалось получить параметр -DoutputType paramater, чтобы дать мне что-нибудь иное, чем текст по умолчанию, но у меня не было возможности поиграть с ним. YMMV.
Ответ 2
Добавление
<plugin>
<groupId>org.apache.servicemix.tooling</groupId>
<artifactId>depends-maven-plugin</artifactId>
</plugin>
плагин создает файл classes/META-INF/maven/dependencies.properties
с зависимостями проектов, которые легко обрабатываются.
Пример полученного результата:
# Project dependencies generated by the Apache ServiceMix Maven Plugin
# Generated at: Mon Oct 10 17:43:00 CEST 2011
groupId = my.group.name
artifactId = my.artifact.name
version = 0.0.1-SNAPSHOT
my.group.name/my.artifact.name/version = 0.0.1-SNAPSHOT
# dependencies
junit/junit/version = 4.8
junit/junit/type = jar
junit/junit/scope = test
org.easymock/easymock/version = 2.4
org.easymock/easymock/type = jar
org.easymock/easymock/scope = test
Ответ 3
В GNU/Linux я бы просто сделал mvn dependency:tree > myFile
. Однако, если вы ограничены только Windows, я буду искать синтаксис Windows для потоковой передачи вывода команды.
В соответствии с этот сайт (просто верхний результат от Google) кажется, что консоль Windows также использует знак >
для прямого выходной поток, то есть файл.
Так вы бы не пробовали это?
Ответ 4
Если у вас несколько модулей под одним и тем же репо/проектом и вы хотите, чтобы зависимости всех модулей в одном файле, чтобы иметь возможность разбить b/w одну сборку, а другую, чтобы увидеть, что-то где-то изменилось, вы можете сделать
$project_dir> mvn dependency:tree -DoutputFile=<absolute_path_to_file> -DappendOutput=true
например.
$project_dir> mvn dependency:tree -DoutputFile=`pwd`/mvn_dependency_tree.txt -DappendOutput=true
Смотрите другие варианты, доступные на https://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html
Ответ 5
Вы всегда можете установить MinGW и MSYS, а затем использовать примеры Linux, используя dependency:tree
в Windows
Ответ 6
Возможно, effective-pom (в сочетании с некоторыми командами linux для сохранения файла) может быть достаточно для ваших нужд.
Ответ 7
Я выполнил приведенную ниже команду и получил файл со всеми зависимостями maven.
mvn dependency:tree -DoutputFile=temp/mvn_dependency_tree.txt
Эта команда создаст папку с именем "temp", и внутри этой папки будет создано имя файла mvn_dependency_tree.txt со всеми зависимостями.