4

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

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

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

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

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

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

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

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

ответ

5

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

+0

Hi Pascal. Спасибо за совет. Это похоже на то, что я за ним. Еще раз спасибо! :-) – John

+0

@John Добро пожаловать. –

+0

для параметра deployables: Не удается найти «deployables» в классе org.codehaus.cargo.maven2.configuration.Configuration В моем случае для версии 1.4.12 для груза разворачиваемый тег не соответствует настройке. http://stackoverflow.com/a/18061722/1488761 –

4

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

 Смежные вопросы

  • Нет связанных вопросов^_^