Как запустить встроенный Tomcat 9 в Maven 3 для целей интеграционного тестирования? - PullRequest
2 голосов
/ 27 января 2020

Я пытаюсь запустить встроенный Tomcat 9 в Maven 3 для целей интеграционного тестирования. Меня привели к cargo-maven2-plugin другие ответы SO.

Итак, пытаясь следовать инструкциям, найденным здесь:

https://codehaus-cargo.github.io/cargo/Static+deployment+of+WAR.html

У меня есть этот фрагмент в простом POM:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.7.6</version>
            <configuration>
                <container>
                    <containerId>tomcat9x</containerId>
                    <type>embedded</type>
                </container>
                <deployables>
                    <deployable>
                        <type>war</type>
                        <properties>
                            <file>path/to/myapp.war</file>
                        </properties>
                    </deployable>
                </deployables>
            </configuration>
        </plugin>
    </plugins>
</build>

, который я пытаюсь выполнить с mvn org.codehaus.cargo:cargo-maven2-plugin:run

Сбой с ошибкой:

[INFO] [en2.ContainerRunMojo] Разрешенный артефакт контейнера org.codehaus.car go: car go -core-container-tomcat: jar: 1.7.6 для контейнера tomcat9x [ПРЕДУПРЕЖДЕНИЕ] Определенный развертываемый объект имеет тот же groupId и artifactId, что и у основного артефакта вашего проекта, но тип другой. Вы определили тип [war], когда упаковка проекта - [pom]. Возможно, это ошибка, и, как следствие, плагин попытается найти это развертываемое в зависимостях проекта.

Как я могу заставить эту работу работать? Я просто хочу запустить данную WAR во встроенном tomcat9 из Maven.

1 Ответ

2 голосов
/ 28 января 2020

После многих попыток перестановок это наконец-то сработало для меня:

        <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.7.9</version>
            <configuration>
                <container>
                    <systemProperties>
                        <myvar1>${myEnvVar}</myvar1>
                        <myvar2>... stuff ...</myvar2>
                    </systemProperties>
                    <containerId>tomcat9x</containerId>
                    <zipUrlInstaller>
                        <url>https://repo.maven.apache.org/maven2/org/apache/tomcat/tomcat/9.0.29/tomcat-9.0.29.zip</url>
                    </zipUrlInstaller>
                </container>
                <deployables>
                    <deployable>
                        <groupId>org.codehaus.cargo</groupId>
                        <artifactId>simple-war</artifactId>
                        <type>war</type>
                        <location>path/to/myapp.war</location>
                        <properties>
                            <context>myapp</context>
                        </properties>
                    </deployable>
                </deployables>
                <executions>
                    <execution>
                        <id>start-server</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>start</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>stop-server</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
            </configuration>
        </plugin>

Используйте плагин failsafe для автоматического запуска интеграционных тестов между start и stop:

            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.21.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                        <configuration>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
...