Как заставить jetty-maven-plugin развернуть войну, извлеченную из хранилища? - PullRequest
4 голосов
/ 20 апреля 2010

Я настраиваю модуль тестирования интеграции для веб-проекта хорошего размера. Модуль тестирования интеграции отделен от самого веб-проекта и имеет свой собственный pom.

Идея состоит в том, чтобы использовать maven-soapui-plugin для отправки запросов и проверки ответа. Настроить мыльный плагин не составит труда. Однако у меня возникают проблемы с выяснением того, как я могу сказать плагину jetty-maven о развертывании войны из удаленного хранилища.

Если я правильно понял, у jetty-maven-plugin есть свойство под названием ' / ', которое позволяет мне указать файл войны для развертывания. Проблема в том, что файл war отсутствует в самом модуле.

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

Вот краткое изложение того, что я хочу:

  1. Получить определенную войну из хранилища или тому подобного, например, через ее artifactId.
  2. Развернуть эту войну на plug-maven-plugin (цель deploy-war?)
  3. заставить maven-soapui-plugin запускать тесты и сообщать о результатах на этапе интеграционных тестов.

Я почти уверен, что я выполнил шаг 3, но я очень не уверен, как выполнить шаг 1 и 2.

Любая помощь очень ценится

Ответы [ 2 ]

6 голосов
/ 20 апреля 2010

возможно можно использовать dependency:copy для извлечения войны, распаковки и получения всего этого, работающего с плагином maven jetty, но это было бы хакерским и довольно уродливым Более чистое решение - использовать плагин Maven Cargo , и это мое предложение. Ниже приведен пример POM, показывающий, как извлечь артефакт WAR, используя его координаты, и как развернуть его во встроенном контейнере 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>

Наконец, просто подключите плагин soapui на фазе integration-test.

4 голосов
/ 09 декабря 2010

Я делаю то же самое, Джон, но я использовал другой подход с плагином Jetty. Я думаю, что конечный результат тот же. Я разрабатываю набор интеграционных тестов для работы с несколькими WAR-файлами веб-сервисов. Я использую dependency:copy в фазе package, а затем список <contextHandler/> s настроен для maven-jetty-plugin:

<project>
    …
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-wars</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>

                        <configuration>
                            <outputDirectory>${project.build.directory}/wars-to-be-tested</outputDirectory>
                            <stripVersion>true</stripVersion>
                            <artifactItems>
                                …
                                <artifactItem>
                                    <groupId>groupId</groupId>
                                    <artifactId>artifactId</artifactId>
                                    <version>version</version>
                                    <type>war</type>
                                </artifactItem>
                                …
                            </artifactItems>
                        </configuration>
                    </execution>
               </executions>
            </plugin>

            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>7.1.3.v20100526</version>
                <configuration>
                    …
                    <contextHandlers>
                        …
                        <contextHandler implementation="org.mortbay.jetty.plugin.JettyWebAppContext">
                            <war>${project.build.directory}/wars-to-be-tested/artifactId.war</war>
                            <contextPath>/context</contextPath>
                        </contextHandler>
                    </contextHandlers>
                </configuration>

                <executions>
                    <execution>
                        <id>start-jetty</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <scanIntervalSeconds>0</scanIntervalSeconds>
                            <daemon>true</daemon>
                        </configuration>
                    </execution>

                    <execution>
                        <id>stop-jetty</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Я бы предпочел объявить различные войны как зависимости, а затем использовать dependency:copy-dependencies для настройки каталога wars-to-be-tested; это позволило бы реактору Maven выяснить, что ему нужно построить мой модуль тестирования интеграции после войн, которые он будет тестировать. Проблема, с которой я столкнулся, заключалась в том, что плагин Jetty думал, что я хочу «наложить» все войны, которые были перечислены как зависимости (концепция, о которой я даже не слышал, пока не увидел, что это произошло); Я не знаю, повредило ли бы это случиться, но мне это не понравилось, поэтому я выбрал метод dependency:copy.

Это просто альтернатива использованию Cargo. Я сам разберусь с этим, но я просто хотел предложить другой способ сделать это.

...