0

Я пытаюсь выяснить, как я могу скопировать все зависимости в версию explicite и все необходимые зависимости.maven copy-dependencies includeGroupIds и все транзитивные элементы для этих

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

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

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

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

Есть ли какие-либо другие инструменты, которые могут это сделать или есть уловка для этого? Спасибо за ответ!

+2

Вы можете попробовать [maven-assembly-plugin] (http://maven.apache.org/plugins/maven-assembly-plugin/). – user944849

ответ

3

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

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

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

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

 <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> элемента, который решает все переходные LIBS на основе включенной LIBS.