странная ошибка с копией зависимостей maven - PullRequest
1 голос
/ 24 сентября 2010

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

первый - если я следую указаниям здесь и добавлю это в мой помп верхнего уровня:

<plugin>  
  <groupId>org.apache.maven.plugins</groupId>  
  <artifactId>maven-dependency-plugin</artifactId>  
  <executions>  
    <execution>  
      <id>copy-installed</id>  
      <phase>install</phase>  
      <goals>  
        <goal>copy</goal>  
      </goals>  
      <configuration>  
        <artifactItems>  
          <artifactItem>  
            <groupId>${project.groupId}</groupId>  
            <artifactId>${project.artifactId}</artifactId>  
            <version>${project.version}</version>
            <type>${project.packaging}</type>
          </artifactItem>
        </artifactItems>
        <outputDirectory>${ReleaseFolder}</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

все вроде нормально, пока я не запустил чистку с последующей установкой - тогда maven жалуется, что не может найти мой pom верхнего уровня для установки. что кажется нелогичным ... я не хочу, чтобы файлы "pom" копировались, я хочу артефакты модуля. Как я могу исключить их?

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

плохо знаком с maven - так что будьте нежны.

edit: Структура моего проекта выглядит примерно так:

/pom.xml (top level pom)
Common_data
ComponentA
ComponentB
ComponentC
ComponentT (depends on A, B and C)
J2ee_A
    j2ee_A_ear (depends on war)
    j2ee_A_rar
    j2ee_A_war

J2ee_B 
    j2ee_B_ear (depends on war)
    j2ee_B_rar
    j2ee_B_war
    j2ee_B_jar (depends on ComponentB)

и затем $ {ReleaseFolder} указывает на / Release на том же уровне, что и пом верхнего уровня.

Продолжение: Итак, что я слышу, это зависимость: копирование - это не путь, а использование сборки.

Как заставить сборку работать на многих различных модулях, а затем скопировать полученные файлы в один выходной каталог?

Для добавления - есть два основных типа компонентов, компонент jar (создает один файл jar) и компонент j2ee, который создает файлы ear, war, jar, rar и config.

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

Идеи кому-нибудь?

Ответы [ 2 ]

1 голос
/ 25 сентября 2010

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

По моему мнению, вы должны НЕ ввести жесткую связь между всеми вашими модулями, и поэтому вы должны НЕ захватывать вещи непосредственно из цели, как кто-то предложил, делая это в корне неправильно.

То, что вы здесь описываете, безусловно, выполнимо с плагином Maven Assembly, и один хороший способ реализовать это - создать выделенный модуль проекта распространения, объявить зависимости от других модулей в его POM и использовать dependencySets в пользовательский дескриптор сборки.

Как-то так для структуры:

.
|-- pom.xml (top level pom)
|-- Common_data
|-- ComponentA
|-- ComponentB
|-- ComponentC
|-- ComponentT (depends on A, B and C)
|-- J2ee_A
|   |-- j2ee_A_ear (depends on war)
|   |-- j2ee_A_rar
|   `-- j2ee_A_war
|-- J2ee_B 
|   |-- j2ee_B_ear (depends on war)
|   |-- j2ee_B_rar
|   |-- j2ee_B_war
|   `-- j2ee_B_jar (depends on ComponentB)
<b>`-- distro
    |-- pom.xml
    `-- src
        `-- main
            `-- assembly
                `-- myassembly.xml</b>

А для дескриптора сборки взгляните на раздел 8.6. Best Practices Книги Maven, они описывают этот подход и предоставляют пример дескрипторов сборки. Адаптируйте его под свои нужды, чтобы использовать формат dir вместо формата архива. Это хорошая отправная точка.

Ресурсы

Ссылки

0 голосов
/ 24 сентября 2010

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

В любом случае, получение доступа к артефакту сборки таким образом несколько необычно. Есть ли какая-то причина, по которой вы не можете просто взять target / foo.jar, поскольку вы знаете, основываясь на соглашениях о каталогах Maven, где ваш артефакт будет после фазы пакета?

...