«объявить несколько запусков для плагина войны, чтобы произвести несколько артефактов (и установить / развернуть их)» Похоже, это может быть шагом вперед. Как бы я это сделал?
Это немного противоречит золотому правилу Maven (правило одного главного артефакта на модуль), но это можно сделать. Один артефакт с несколькими конфигурациями в Maven в блоге описан один из способов реализации этого подхода:
Я решил поместить всю конфигурацию среды в специальное дерево исходных текстов со следующей структурой:
+-src/
+-env/
+-dev/
+-test/
+-prod/
Затем я настроил maven-war-plugin на три разных исполнения (по умолчанию плюс два дополнительных), по одному для каждой среды, создавая три разных файла war: beer-1.0-dev.war, beer-1.0-test.war и beer -1.0-prod.war. Каждая из этих конфигураций использовала стандартные файлы вывода из проекта, а затем копировала содержимое из соответствующего каталога src/env/
в файлы вывода, позволяя поместить файл переопределения в соответствующий каталог src/env/
. Он также поддерживает копирование полной древовидной структуры в выходной каталог. Таким образом, если вы, например, хотели заменить web.xml
в тесте, вы просто создали следующий каталог:
src/env/test/WEB-INF/
и поместили свой тестовый web.xml
в этот каталог, и если вы хотите переопределить файл db.property
, помещенный в корневой каталог пути к классам для тестовой среды, вы создали следующий каталог:
src/env/test/WEB-INF/classes
и поместил свой тестовый db.property
файл в этот каталог.
Я сохранил каталог src/main
, настроенный для среды разработки. Причиной этого была возможность использовать maven-jetty-plugin без какой-либо дополнительной настройки. Конфигурация
Ниже вы найдете конфигурацию maven-war-plugin, которую я использовал для этого:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<classifier>prod</classifier>
<webappDirectory>${project.build.directory}/${project.build.finalName}-prod</webappDirectory>
<webResources>
<resource>
<directory>src/env/prod</directory>
</resource>
</webResources>
</configuration>
<executions>
<execution>
<id>package-test</id>
<phase>package</phase>
<configuration>
<classifier>test</classifier>
<webappDirectory>${project.build.directory}/${project.build.finalName}-test</webappDirectory>
<webResources>
<resource>
<directory>src/env/test</directory>
</resource>
</webResources>
</configuration>
<goals>
<goal>war</goal>
</goals>
</execution>
<execution>
<id>package-dev</id>
<phase>package</phase>
<configuration>
<classifier>dev</classifier>
<webappDirectory>${project.build.directory}/${project.build.finalName}-dev</webappDirectory>
<webResources>
<resource>
<directory>src/env/dev</directory>
</resource>
</webResources>
</configuration>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
(...) Я могу определить каждый клиентский проект с профилями, но я не знаю, есть ли способ опубликовать их в репозитории.
У вас есть несколько вариантов:
- использовать профили и запускать сборку несколько раз (создавать артефакты с классификатором и устанавливать / развертывать их)
- объявить несколько запусков для плагина войны для создания нескольких артефактов (и установить / развернуть их)
- использовать разные модули (и, возможно, военные наложения, чтобы объединить общую часть с конкретным)
Или, по крайней мере, способ в Maven автоматически создавать артефакт с указанным профилем, скажем, из тега SVN.
Что ж, это выполнимо. Но без более подробной информации о конкретной проблеме трудно быть более точным.
person
Pascal Thivent
schedule
06.10.2010