Модуль сборки Maven. Есть ли способ распаковать / распаковать архив прямо из файла дескриптора, а не полагаться на плагин antrun?
Я использую Maven assembly plugin версии 2.2.1 для сборки пакета в пользовательском, проприетарном формате. В рамках этого процесса мне нужно извлечь кучу внешних архивов (под внешним я подразумеваю, что они не перечислены как зависимости maven, но они являются произвольными файлами в файловой системе).
Вы не знаете, может ли Maven assembly сделать это ? Я посмотрел и, по-видимому, он способен извлечь кучу зависимостей в произвольной папке, но он не может извлечение внешнего архива.
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 для общих ресурсов или использовать некоторые специальные плагины, которые делают это за вас.