2016-05-04 2 views
0

У меня есть многомодульный проект, где я строю каждый проект с tycho. Все, включая фазу «установить», отлично работает. Каждый модуль дает один артефакт, который устанавливается в мой локальный репозиторий maven ... около 10 артефактов.maven получить многомодульные модули проекта в один каталог

Теперь я хотел бы сделать maven дополнительно скопировать все 10 артефактов в локальный каталог, если успехи сборки. В конце, когда я перестроил свое приложение, я должен увидеть только один каталог со всеми (обновленными) артефактами.

Btw, как крупные компании получают свой продукт из хранилища maven?

+0

«Кстати, как крупные компании получают свой продукт из репозиториев maven?» Вероятно, они будут использовать [Nexus] (http://blog.sonatype.com/2010/04/why-nexus-for-the-non-programmer/) – ujulu

ответ

2

Вы можете определить агрегатор модуль в проекте, который имеет зависимость от всех других проектов, а затем использовать maven-dependency-plugin собрать все банки

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>copy-libs</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <includeScope>runtime</includeScope> 
       <overWriteReleases>false</overWriteReleases> 
       <overWriteSnapshots>true</overWriteSnapshots> 
       <outputDirectory>${project.build.directory}/lib</outputDirectory> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 

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

<execution> 
    <id>copy-sh-files</id> 
    <phase>package</phase> 
    <goals> 
    <goal>unpack-dependencies</goal> 
    </goals> 
    <configuration> 
    <outputDirectory>${project.build.directory}/scripts</outputDirectory> 
    <includes>bin/*.sh</includes> 
    </configuration> 
</execution> 

положить, что все вместе в один ZIP, вы должны создать файл сборки в src/assembly/zip.xml с этим содержанием

<assembly> 
    <id>zip</id> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <fileSets> 
     <fileSet> 
      <directory>src/bin</directory> 
      <outputDirectory>.</outputDirectory> 
      <includes> 
       <include>*.cmd</include> 
      </includes> 
      <lineEnding>dos</lineEnding> 
     </fileSet> 
     <fileSet> 
      <directory>target/lib</directory> 
      <outputDirectory>lib</outputDirectory> 
      <includes> 
       <include>*.jar</include> 
      </includes> 
     </fileSet> 
    </fileSets> 
</assembly> 

и добавить maven-assembly-plugin к вашей сборке плагин

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
    <descriptor>src/assembly/zip.xml</descriptor> 
    <finalName>yourProjectFinalName</finalName> 
    </configuration> 
    <executions> 
    <execution> 
     <id>zip-bundle</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Все эти конфигурации - всего лишь один из способов сделать это, но это хорошее начало. Крупные компании обычно имеют различные требования к своей упаковке, в том числе установщики и т. Д., Поэтому не существует решения одного размера и подходит для окончательного решения.

+0

Wow, ty. На самом деле, у меня есть родительский pom.xml, в котором перечислены все мои модули и есть пакетный тип «pom». Если я создам дополнительный проект агрегатора, мне придется поддерживать дополнительный список всех модулей. Нельзя ли добавить несколько строк в родительский pom.xml? –

+0

вы можете использовать https://maven.apache.org/plugins/maven-antrun-plugin/ для выполнения муравьиной задачи и скопировать все файлы, но это не использует всю силу механизма зависимости maven, то есть разрешение и собирая все транзитивные зависимости, которые требуются –

Смежные вопросы