Выпуск различных конфигураций с Maven - PullRequest
1 голос
/ 05 октября 2010

Я сейчас перевожу наш процесс сборки в Maven из Ant.Наше приложение развернуто для множества различных клиентов, у каждого из которых есть уникальный набор зависимостей и конфигурации.Я могу реализовать различные профили, чтобы смоделировать их и построить необходимые войны из них.Однако это процесс, который происходит во время компиляции.

Каждый выпуск помечен под SVN, а также загружен в наш внутренний репозиторий Nexus.Я хочу иметь возможность взять определенный выпуск и реконструировать его на основе профиля.Есть ли способ сделать что-то подобное?Есть ли что-то кроме профилей, которые я должен использовать?

Ответы [ 4 ]

2 голосов
/ 06 октября 2010

"объявить несколько вариантов выполнения для плагина войны, чтобы создать несколько артефактов (и установить / развернуть их)". Похоже, это может быть путь вперед. Как бы я поступил так?

Это немного противоречит золотому правилу Maven (один главный артефакт на правило модуля), но может быть сделано. Один артефакт с несколькими конфигурациями в блоге Maven описывает один из способов реализации этого подхода:

решил поставить всю среду конкретная конфигурация в специальном исходное дерево, со следующим Структура: * +1010 *

+-src/
  +-env/
    +-dev/
    +-test/
    +-prod/

Затем я настроил плагин maven-war-plugin. иметь три разных исполнения (по умолчанию плюс два дополнительных), один для каждая среда, производя три разные военные файлы: beer-1.0-dev.war, beer-1.0-test.war и пиво-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-плагин без каких-либо дополнительных конфигурации. Конфигурация

Ниже вы найдете плагин 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-тега.

Ну, это выполнимо. Но без подробностей о конкретной проблеме трудно быть более точным.

1 голос
/ 06 октября 2010

Я бы взглянул на вашу архитектуру и выяснил, есть ли способ разделить ваш проект на несколько проектов.Одним из них будет основная кодовая база.Другие проекты будут зависеть от файла JAR, созданного основным проектом, и добавлять свои собственные настройки, зависимости и т. Д. Для создания окончательного артефакта.

Это позволит вам создавать версии кода, специфичные для клиента, независимо друг от друга.как хранение общего кода в одном месте и отдельно от конкретного клиента.

0 голосов
/ 10 октября 2012

Я закончил тем, что сделал немного другое.Мы не храним релизы в нашем внутреннем репозитории.Вместо этого мы строим с использованием Hudson и мультиконфигурационного проекта (одна конфигурация / профиль для каждого клиента).Таким образом, когда делается релиз, запускается задание Hudson для создания разных войн для всех клиентов.Затем они хранятся на сервере Hudson вместо Nexus.Сборки для определенных версий и клиентов также могут быть собраны в любое время из выпусков в Nexus.- Самблейк 16 марта 2011 года в 12:32

0 голосов
/ 05 октября 2010

Вы посмотрели на плагин Maven Assembly ?

Этот плагин позволяет вам настроить сборку вашего дистрибутива - т.е. какой формат (.tar.gz, .zip,и т. д.), структура каталогов и т. д. Я думаю, что вы должны иметь возможность привязать несколько экземпляров плагина к фазе package, чтобы собрать несколько вариантов вашего вывода (т. е. упаковку для клиента 1, клиента 2 и т. д. отдельно).

Плагин развертывания должен автоматически обрабатывать развертывание каждого из ваших собранных пакетов в каталоге target в хранилище.

...