У меня есть файлы конфигурации и различные документы, которые я хочу скопировать из среды dev в каталог dev-server с помощью Maven2. Как ни странно, Maven не кажется сильным в этой задаче.
Некоторые из вариантов:
- Простое использование задачи копирования в Maven
<copy file="src/main/resources/config.properties" tofile="${project.server.config}/config.properties"/>
Используйте плагин Ant для выполнения копирования из Ant.
Создайте артефакт типа zip вместе с «основным» артефактом POM, который обычно имеет тип jar , затем распакуйте этот артефакт из репозитория в целевой каталог.
плагин maven-resources , как упомянуто ниже.
Плагин Maven Assembly - но для этого требуется много ручных определений, когда я хочу делать вещи просто и «условно».
Эта страница даже показывает, как создать плагин для копирования!
плагин maven-upload , как указано ниже.
maven-зависимый плагин с копией , как упомянуто ниже.
Все это кажется ненужным ad hoc: Maven должен превосходно выполнять эти стандартные задачи без суеты и беспокойства.
Любой совет?
источник
Ответы:
Не уклоняйтесь от плагина Antrun. Просто потому, что некоторые люди склонны думать, что Муравей и Мавен находятся в оппозиции, это не так. Используйте задачу копирования, если вам необходимо выполнить одноразовую индивидуальную настройку:
Отвечая на этот вопрос, я сосредоточусь на деталях того, что вы спросили. Как мне скопировать файл? Вопрос и имя переменной приводят меня к более крупным вопросам, таким как: «Есть ли лучший способ справиться с настройкой сервера?» Используйте Maven в качестве системы сборки для создания развертываемого артефакта, затем выполните эти настройки либо в отдельных модулях, либо в другом месте полностью. Если вы поделились немного больше со своей средой сборки, возможно, есть лучший способ - есть плагины для предоставления нескольких серверов. Не могли бы вы прикрепить сборку, которая распакована в корне сервера? Какой сервер вы используете?
Опять же, я уверен, что есть лучший способ.
источник
task
параметр устарел ( плагин Antrun ). Вы должны использоватьtarget
вместо этого (начиная с 1.5). К сожалению, есть примеры, которые смешивают это; например,target
параметр иversion
<1,5.источник
Для копирования файла используйте:
Для копирования папки с подпапками используйте следующую конфигурацию:
источник
<filtering>
предотвращение нежелательных изменений, например, файлов сценариев, которые используют${...}
переменные.Плагин зависимостей maven сэкономил мне много времени, занимаясь муравьиными заданиями:
Зависимость: копия является documentend, и имеет более полезные цели , как распаковывать.
источник
Для простых задач копирования я могу порекомендовать copy-rename-maven-plugin . Это просто и удобно в использовании:
Если вы хотите скопировать более одного файла, замените
<sourceFile>...</destinationFile>
деталь наКроме того, вы можете указать несколько исполнений в несколько этапов, если необходимо, вторая цель - «переименовать», которая просто делает то, что говорит, в то время как остальная часть конфигурации остается прежней. Дополнительные примеры использования приведены на странице использования .
Примечание : этот плагин может копировать только файлы, а не каталоги. (Спасибо @ james.garriss за то, что нашли это ограничение.)
источник
Приведенное выше решение для ant проще всего настроить, но мне повезло с помощью maven-upload-plugin от Atlassian. Мне не удалось найти хорошую документацию, вот как я ее использую:
Переменные типа "$ {jboss.host}", на которые есть ссылки выше, определены в моем ~ / .m2 / settings.xml и активируются с помощью профилей maven. Это решение не ограничено JBoss, это то, что я назвал своими переменными. У меня есть профиль для dev, test и live. Поэтому, чтобы загрузить свое ухо в экземпляр jboss в тестовой среде, я бы выполнил:
Вот фрагмент из файла settings.xml:
Примечания: репозиторий Atlassian Maven с этим плагином находится здесь: https://maven.atlassian.com/public/
Я рекомендую скачать исходники и просмотреть документацию внутри, чтобы увидеть все функции, которые предоставляет плагин.
`
источник
Что ж, maven не должен хорошо выполнять тонкие гранулярные задачи, это не язык сценариев, такой как bash или ant, он скорее декларативный - вы говорите - мне нужна война или ухо, и вы это понимаете. Однако, если вам нужно настроить внешний вид войны или ушей, у вас есть проблема. Это просто не процедурный, как муравей, а декларативный. У этого есть некоторые плюсы в начале, и может быть много минусов в конце.
Я предполагаю, что первоначальная концепция заключалась в том, чтобы иметь прекрасные плагины, которые «просто работают», но реальность другая, если вы делаете нестандартные вещи.
Однако, если вы приложите достаточно усилий к своим poms и нескольким пользовательским плагинам, вы получите гораздо лучшую среду сборки, как, например, с ant (конечно, это зависит от вашего проекта, но оно становится все более и более актуальным для больших проектов).
источник
У меня был очень хороший опыт работы с copy-maven-plugin . Он имеет гораздо более удобный и лаконичный синтаксис по сравнению с плагином maven-resources-plugin.
источник
Общий способ копирования произвольных файлов - использование транспортной абстракции Maven Wagon . Он может обрабатывать различные пункты назначения с помощью протоколов , таких как
file
,HTTP
,FTP
,SCP
илиWebDAV
.Есть несколько плагинов, которые предоставляют средства для копирования файлов с помощью
Wagon
. Наиболее заметными являются:Из-из-табакерки Maven Plugin Deploy
Есть
deploy-file
цель. Это довольно негибко, но может сделать работу:Существенным недостатком использования
Maven Deploy Plugin
является то, что он предназначен для работы с репозиториями Maven. Это предполагает особую структуру и метаданные. Вы можете видеть , что файл помещается подfoo/bar/1.0/file-1.0.ext
и контрольных сумм файлов создаются. Обойти это невозможно.Плагин Wagon Maven
Используйте
upload-single
цель :Использование
Wagon Maven Plugin
для копирования является простым и, кажется, наиболее универсальным.В приведенных выше примерах
<url>
может быть любой поддерживаемый протокол. Смотрите список существующих провайдеров вагонов . Напримерfile:///copy/to
SSH
:scp://host:22/copy/to
Приведенные выше примеры передают параметры плагина в командной строке. Кроме того, плагины могут быть настроены непосредственно в
POM
. Тогда вызов будет просто похожmvn deploy:deploy-file@configured-execution-id
. Или это может быть связано с определенной фазой сборки.Обратите внимание, что для протоколов, подобных
SCP
работе, вам необходимо определить расширение в вашемPOM
:Если место назначения, в которое вы копируете, требует аутентификации, учетные данные могут быть предоставлены через
Server
настройки .repositoryId
/serverId
передаваемый плагинам должен соответствовать серверу, указанному в настройках.источник
Я могу только предположить, что ваше свойство $ {project.server.config} определено пользователем и находится вне стандартного макета каталога.
Если так, то я бы использовал задачу копирования.
источник
Другой способ - объединить эти вещи в артефакт, используя плагин сборки. Затем вы можете использовать плагин зависимости, чтобы распаковать эти файлы, куда вы хотите. В плагине зависимостей также есть цели копирования для копирования артефактов.
источник
Мне удалось собрать воедино несколько разных источников для этого ответа:
От
~/.m2/settings.xml
:Затем выполните команду: (-X для отладки)
mvn -X upload:upload
источник
Подводя итог некоторым из прекрасных ответов выше: Maven предназначен для создания модулей и копирования результатов в репозиторий Maven. Любое копирование модулей в каталог развертывания / установки-ввода должно выполняться вне контекста основных функций Maven, например, с помощью команды копирования Ant / Maven .
источник