Как сделать мочевую Maven-плагин развернуть войну, которая извлекается из репозитория?

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

Вопрос

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

Идея состоит в том, чтобы использовать Maven-Soapui-Plugin для отправки запросов и проверки ответа. Настройка SOAPUI-плагина не хлопот. Тем не менее, у меня возникли проблемы с выяснением того, как я могу сказать мочевую плагин Maven, чтобы развернуть войну из удаленного репозитория.

Если я понял правильно, плагин Meetty-Maven имеет свойство под названием «u003CwebApp> /u003CwebApp> «Что позволяет вам указать файл войны для развертывания. Проблема в том, что файл войны нет в самом модуле.

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

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

  1. Получите конкретную войну из репозитория или тому подобного, в примере через его артефактид.
  2. Разверните эту войну к плагину Meaven-Maven (ворот - война?)
  3. Получите Maven-Soapui-Plugin, чтобы запустить тесты и сообщать о результатах обратно в фазу интеграции-тестирования.

Я уверен, что у меня есть шаг 3, но я очень не уверен, как достичь шага 1 и 2.

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

Это было полезно?

Решение

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

Другие советы

Я делаю то же самое, Джон, но я взял другой подход с плагином молы. Я думаю, что конечный результат одинаково. Я разрабатываю интеграционно-тестовый набор, чтобы бежать против нескольких веб-сервисов. я использую 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 выяснить, что ему необходимо создать модуль интеграции-тестирования после того, как войны будут тестировать. Проблема, в которой я столкнулся, заключался в том, что плагин причала думал, что я хотел «наложить» все войны, которые были перечислены в качестве зависимостей (концепция, которую я никогда не слышал о том, как я не увидел этого); Я не знаю, если позволить этому случиться, мне что-то пострадало, но мне это не понравилось, поэтому я пошел с dependency:copy метод.

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

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