2008-11-10 3 views
47

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

mvn dependency:build-classpath 

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

Так что список мне нужно будет что-то вроде

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

идеально как свойство Maven, но я думаю, файл, такие как наращивание может генерировать классы будут делать.

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

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

+0

просто представить патч для плагина зависимостей и я буду применять его к следующей версии. Путь сборки class является самым близким к тому, что вы хотите, нам просто нужно настроить параметры для получения желаемого результата. – 2009-04-19 02:09:58

ответ

5

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

Кроме того, вы пробовали тег <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> 
+0

Я знаю Apache Felix, но это не делает то, что мне нужно, поэтому я делаю это вручную. – 2008-11-11 11:29:28

+0

addClasspath добавит список jar в заголовок манифеста Class-Path, я не вижу, чтобы в документах maven-jar-plugin указывалось, что можно поместить путь класса в другие заголовки. Также Bundle-Classpath требует больше, чем просто список банок. – 2008-11-11 11:30:07

16

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

2

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

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

58

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

$ mvn dependency:tree 

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

1

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

0

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

$ mvn dependency:tree 

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

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

$ mvn dependency:tree | findstr javax.persistence 

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

$ mvn dependency:tree | grep javax.persistence