Как запустить jetty:run-war, используя war, определенный координатами maven?

StackOverflow https://stackoverflow.com/questions/2258346

Вопрос

Предыстория:Я настраиваю модуль функциональных тестов в проекте maven.Мы используем maven-jetty-плагин для тестирования.

Я настроил плагин jetty как описано здесь (чтобы хорошо играть с отказоустойчивым плагином), но то, что я хотел бы сделать, это развернуть артефакт war из нашего основного веб-модуля с помощью jetty (который только что был установлен в локальное репозиторий maven к моменту запуска модуля функционального тестирования).

Плагин jetty для цель бега-война имеет <webApp> элемент, который использует строковый путь к war для развертывания.Я бы предпочел указать войну для развертывания, используя координаты maven, определенные нашим веб-модулем.Есть ли какой-нибудь способ сделать это?

Возможные обходные пути:

  1. Раздел 4.13 "Улучшенные сборки с Maven" описывает использование cargo для развертывания war, указанного с использованием координат maven, но это серьезный перебор, учитывая, что мы используем jetty.
  2. Более разумным IMO является использование dependency: copy для копирования только что созданного и установленного артефакта war в фиксированный путь в целевом каталоге модуля функциональных тестов, который я затем могу предоставить в плагине jetty <webApp> элемент конфигурации.
Это было полезно?

Решение

У цели run-war плагина jetty есть элемент, который использует строковый путь к war для развертывания.Я бы предпочел указать войну для развертывания, используя координаты maven, определенные нашим веб-модулем.Есть ли какой-нибудь способ сделать это?

На самом деле это не тот плагин maven jetty, который предполагается использовать, плагин развертывает war текущего модуля, то, что вы хотите сделать, по умолчанию не поддерживается.

Раздел 4.13 "Улучшенные сборки с Maven" описывает использование cargo для развертывания войны, указанной с использованием координат maven,

Да, Cargo может сделать это чистым способом.

но это серьезный перебор, учитывая, что мы используем jetty.

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

Более разумным IMO является использование dependency: copy для копирования только что созданного и установленного артефакта war в фиксированный путь в целевом каталоге модуля функциональных тестов

Без обид, но весь ваш вопрос звучит немного как: У меня есть молоток, он годился для гвоздя, могу ли я использовать его для шурупа, учитывая, что приобретение отвертки кажется серьезным излишеством? Чтобы ответить на этот вопрос (который каким-то образом является тем, что вы говорите), вы можете использовать dependency:copy и заставить все это работать с плагином maven jetty, но это взлом (и поскольку вы на самом деле не задаете никаких вопросов, я предполагаю, что вы хотели услышать мнение по этому поводу).Конечно, окончательное решение принадлежит вам :)

На всякий случай, вот как я бы реализовал это с помощью Cargo:

<dependencies>
  <dependency>
    <groupId>war group id</groupId>
    <artifactId>war artifact id</artifactId>
    <type>war</type>
    <version>war version</version>
  </dependency>
  ...
</dependencies>
...
<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven2-plugin</artifactId>
      <configuration>
        <!-- Container configuration -->
        <container>
          <containerId>jetty6x</containerId>
          <type>embedded</type>
        </container>
        <!-- Configuration to use with the container or the deployer -->
        <configuration>
          <deployables>
            <deployable>
              <groupId>war group id</groupId>
              <artifactId>war artifact id</artifactId>
              <type>war</type>
              <properties>
                <context>war context</context>
              </properties>
            </deployable>
          </deployables>
        </configuration>
        <!-- Don't wait, execute the tests after the container is started -->
        <wait>false</wait>
      </configuration>
      <executions>
        <execution>
          <id>start-container</id>
          <phase>pre-integration-test</phase>
          <goals>
            <goal>start</goal>
          </goals>
        </execution>
        <execution>
          <id>stop-container</id>
          <phase>post-integration-test</phase>
          <goals>
            <goal>stop</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>

И я не думаю, что это можно объективно квалифицировать как "серьезный перебор".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top