Модуль сборки Maven. Есть ли способ распаковать / распаковать архив прямо из файла дескриптора, а не полагаться на плагин antrun?


Я использую Maven assembly plugin версии 2.2.1 для сборки пакета в пользовательском, проприетарном формате. В рамках этого процесса мне нужно извлечь кучу внешних архивов (под внешним я подразумеваю, что они не перечислены как зависимости maven, но они являются произвольными файлами в файловой системе).

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

2 3

2 ответа:

Использование <unpack>true</unpack> в вашем <dependencySet> - это путь.

Внешние архивы не поддерживаются Maven. Поэтому вам нужно будет прикрепить их с помощью, например, build-helper:attach-artifact, тогда вы можете ссылаться на него через <dependencySet>

Обновление

Один из комментариев хотел узнать, как можно избежать установки вложенного артефакта в хранилище maven (локальное/удаленное)

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

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

Итак, вы начинаете с фиктивного модуля, который будет выглядеть примерно так:
<project>
  ...
  <packaging>pom</packaging>
  ...
  <properties>
    <maven.deploy.skip>true</maven.deploy.skip>
    <maven.install.skip>true</maven.install.skip>
    <!-- or you could override the plugin configuration for a safer - but less quick - solution -->
  </properties>
  ...
</project>

Этот фиктивный модуль может присоединять файлы с помощью build-helper:attach-artifacts

Модуль вашей сборки просто перечислит зависимости с <scope>provided</scope> и <optional>true</optional> в качестве защиты от превращения в транзитивные зависимости. (не обязательно, если сборка является, скажем, пакетом установщика и не будет использоваться другими сборками Maven.

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

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

Вы должны иметь возможность запускать maven pom из любой точки "ваша машина", " сервер интеграции (Дженкинс...)". Ant-это инструмент для" домашней " сборки, maven способствует соглашению по конфигурации и многократному использованию.

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

Я ожидаю, что все мои проекты будут быть сборным как id, с простой проверкой svn. Все, что не входит в проект, должно быть загружено из репозиториев mvn.

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