Как сделать мочевую Maven-плагин развернуть войну, которая извлекается из репозитория?
-
30-09-2019 - |
Вопрос
Я устанавливаю модуль тестирования интеграции для веб-проекта хорошего размера. Модуль тестирования интеграции отделен от самого веб-проекта, и у него есть собственный пом.
Идея состоит в том, чтобы использовать Maven-Soapui-Plugin для отправки запросов и проверки ответа. Настройка SOAPUI-плагина не хлопот. Тем не менее, у меня возникли проблемы с выяснением того, как я могу сказать мочевую плагин Maven, чтобы развернуть войну из удаленного репозитория.
Если я понял правильно, плагин Meetty-Maven имеет свойство под названием «u003CwebApp> /u003CwebApp> «Что позволяет вам указать файл войны для развертывания. Проблема в том, что файл войны нет в самом модуле.
Я слышал, что я могу использовать плагин сборки Maven, чтобы извлечь войну из репозитория через проекты Artifactid, но мне еще не выяснить, как я пойду на это.
Вот краткое изложение того, что я хочу:
- Получите конкретную войну из репозитория или тому подобного, в примере через его артефактид.
- Разверните эту войну к плагину Meaven-Maven (ворот - война?)
- Получите 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
метод.
Это просто альтернатива использования груза. Я буду смотреть в это сам, но я просто хотел предоставить еще один способ сделать это.