Ответ 1
Эта команда создаст дерево зависимостей вашего проекта maven:
$ mvn dependency:tree
Я уверен, что вам понравится результат: -)
Используя 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). Я спрашиваю о том, как получить данные, которые я хочу написать, а именно список, показанный выше.
Эта команда создаст дерево зависимостей вашего проекта maven:
$ mvn dependency:tree
Я уверен, что вам понравится результат: -)
Насколько я могу судить, вы не можете получить именно этот вывод с запятыми и без пробелов. Как через командную строку, так и через файл 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
Вот команда, которую вы просите
$ 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:*'
На самом деле, просто для окончательного списка банок, просто используйте
mvn dependency:list
Что гораздо проще, чем зависимость: дерево, которое является лишним, чтобы просто получить окончательный список, поскольку оно показывает детализированное переходное дерево и разрешение конфликтов (с подробным изложением).
Вы посмотрели проект 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>
Мне может что-то не хватает, но поскольку вы уже использовали зависимости от копирования, это звучит так, как будто вы на самом деле просто список файлов в указанном каталоге.
Ant может сделать это для вас без каких-либо проблем, также как и оболочка script.
Maven может автоматически создавать путь к классам в вашем манифесте: http://maven.apache.org/guides/mini/guide-manifest.html
Это конфигурация плагина архива Maven.
Чтобы добавить метку к существующим ответам, текущий maven-dependency-plugin позволяет сохранить путь к классу с помощью outputProperty
параметр.
Вот скрипт 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]
}