зависимости от копирования maven включаютGroupIds и все переходные элементы к этим

Я пытаюсь понять, как скопировать все зависимости в явную версию и все необходимые зависимости.

Например: для моего проекта требуется версия 3 сторонней библиотеки под названием foobar. Я хочу скопировать библиотеки версии 3 в папку с именем lib-foobar-${foobar.version}.
В этой папке находятся те jar-файлы, которые необходимы для использования foobar в версии 3. Это означает сам jar-файл и все зависимые jar-файлы, объявленные в foobar pom.

В настоящее время я использую пакет org.codehaus.mojo:maven-dependency-plugin:2.1 с целью копирования зависимостей в пакете Phase.
Моя конфигурация:

<configuration>
    <outputDirectory>${project.build.directory}/lib-foobar-${foobar.version}</outputDirectory>
    <includeGroupIds>com.foobar</includeGroupIds>
    <excludeTransitive>false</excludeTransitive>
    <excludeScope>test</excludeScope>
    <includeScope>compile</includeScope>
</configuration>

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

Существуют ли какие-либо другие инструменты, которые могут это сделать, или есть какие-то хитрости для этого?


person javaBeCool    schedule 07.08.2013    source источник
comment
Вы можете попробовать maven-assembly-plugin.   -  person user944849    schedule 09.08.2013


Ответы (1)


Большое спасибо пользователю 944849.

Это было очень полезно для меня, чтобы найти лучшее решение в этом случае.

Для всех, кто заинтересован в моем решении, вот оно:

Сначала я изменил плагин на maven-assembly-plugin и добавил новый файл сборки

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <dependencies>
           <dependency>
            <groupId>com.foobar</groupId>
            <artifactId>foobar-parent</artifactId>
            <version>${foobar.version}</version>
            <type>pom</type>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <id>copy-foobar</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
             <configuration>
                <descriptors>
                  <descriptor>src/assemble/foobar-libs.xml</descriptor>
                </descriptors>
            </configuration>
           </execution> 
         </executions>
      </plugin>

И файл сборки выглядит так:

<assembly
  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  <id>standalone</id>
  <formats>
    <format>dir</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <includes>
        <include>org.foobar</include>
      </includes>
      <outputDirectory>/lib-foobar-${foobar.version}</outputDirectory>
      <useProjectArtifact>true</useProjectArtifact>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <unpack>false</unpack>
    </dependencySet>
  </dependencySets>

</assembly>

Ключом был элемент <useTransitiveFiltering>, который разрешает все транзитивные библиотеки на основе включенных библиотек.

person javaBeCool    schedule 13.08.2013