Maven: не удается запустить плагины в проекте JAR на этапах до и после тестирования интеграции

Я пишу файл JAR, который действует как клиент веб-приложения Jenkins CI. Поэтому в моем проекте упаковка jar, а не военная упаковка. Однако для интеграционного тестирования мне нужно развернуть Jenkins WAR, чтобы протестировать мои JAR-классы.

Я использую cargo-maven2-plugin и настроил его так, чтобы я мог запускать Jenkins из командной строки с помощью «mvn cargo: run». Однако запуск «mvn install» переходит в фазу интеграционного тестирования без попытки запуска Дженкинс с грузом. На самом деле в выводе «mvn install -X» даже не упоминается слово «cargo».

Похоже, я правильно привязал груз к pre-integration-test и post-integration-test, но он просто не срабатывает.

ПОМ ниже:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.phoenix.build</groupId>
<artifactId>HostOp</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jetty.port>53657</jetty.port><!-- mnemonic: 'JENKS' on a telephone -->
</properties>
<name>Host Operations</name>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.7.2</version>
                <configuration>
                    <systemProperties>
                        <property>
                            <name>maven.output.dir</name>
                            <value>${project.build.directory}</value>
                        </property>
                    </systemProperties>
                    <excludes>
                        <exclude>**/*IntegrationTest.java</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-tests</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <skip>false</skip>
                            <excludes>
                                <exclude>none</exclude>
                            </excludes>
                            <includes>
                                <include>**/*IntegrationTest.java</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <executions>
                    <execution>
                        <id>start-container</id>
                        <phase>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>
                <configuration>
                    <container>
                        <containerId>jetty6x</containerId>
                        <type>embedded</type>
                        <systemProperties>
                            <JENKINS_HOME>target/test-classes/jenkins_home</JENKINS_HOME>
                        </systemProperties>
                    </container>
                    <configuration>
                        <properties>
                            <cargo.servlet.port>53657</cargo.servlet.port>
                            <cargo.jvmargs>-DJENKINS_HOME=target/test-classes/jenkins_home</cargo.jvmargs>
                        </properties>
                        <deployables>
                            <deployable>
                                <type>war</type>
                                <location>target/test-classes/jenkins.war</location>
                                <pingURL>http://localhost:53657/jenkins/view/All/newJob</pingURL>
                            </deployable>
                        </deployables>
                    </configuration>
                </configuration>
            </plugin>
        </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
    </dependency>
</dependencies>
</project>

Как я могу заставить это стрелять по мере необходимости?


person Robert Mandeville    schedule 27.04.2012    source источник
comment
Вы уверены, что у вас есть плагин в вашем элементе /project/build/plugins и случайно не вложен в профиль? Это кусало меня больше раз, чем я могу сосчитать, и все же я все еще делаю это.   -  person Ryan Stewart    schedule 27.04.2012
comment
Извините, это в ‹проект›‹сборка›‹плагины›. Хорошая мысль, однако.   -  person Robert Mandeville    schedule 27.04.2012
comment
Можете ли вы опубликовать pom, урезанный только до грузового плагина, который не работает так, как вы видите?   -  person Ryan Stewart    schedule 27.04.2012
comment
Он был настолько мал, что я просто разместил весь POM.   -  person Robert Mandeville    schedule 27.04.2012


Ответы (1)


Ваш опубликованный pom работает, как и ожидалось для меня. Я просто бросил его в пустой проект и:

$ mvn install
[...]
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ cargo-plugin-test ---
[...]
[INFO] --- maven-surefire-plugin:2.7.2:test (integration-tests) @ cargo-plugin-test ---
[...]
[INFO] --- cargo-maven2-plugin:1.2.1:start (start-container) @ cargo-plugin-test ---
[INFO] [2.ContainerStartMojo] Resolved container artifact org.codehaus.cargo:cargo-core-container-jetty:jar:1.2.1 for container jetty6x
[INFO] [beddedLocalContainer] Jetty 6.x Embedded starting...
[...]
2012-04-27 15:01:02.457:WARN::Web application not found target/test-classes/jenkins.war
2012-04-27 15:01:02.457:WARN::Failed startup of context 
[...]
2012-04-27 15:01:02.741:INFO::Started [email protected]:53657
[INFO] [beddedLocalContainer] Jetty 6.x Embedded started on port [53657]
[...]

Это с Maven 3.0.3:

$ mvn --version
Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
Maven home: /home/ryan/dev/tools/maven
Java version: 1.7.0_03, vendor: Oracle Corporation
Java home: /home/ryan/dev/tools/jdk1.7.0_03/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.0.0-17-generic", arch: "amd64", family: "unix"

Я не уверен, что еще это может быть.

person Ryan Stewart    schedule 27.04.2012
comment
Я использую ту же версию Maven. Если я избавлюсь от своих интеграционных тестов (rm /src/test/java/com/phoenix/build/jenkins/*IntegrationTest.java), Cargo запустится и выключится. Так что это, по-видимому, работает только тогда, когда мне это действительно не нужно. - person Robert Mandeville; 28.04.2012
comment
Становится лучше. Я обнаружил, что если я напишу тест, который на самом деле ничего не делает, и выкину остальные, я смогу запустить Cargo. Поэтому я взял один из своих других тестов и закомментировал все, а затем раскомментировал одно за другим. Есть одно место, где тест запускает полубесконечный цикл (a while(true) с разрывом внутри). Пока это остается полубесконечным, Cargo не запустится. Если я сделаю конечный цикл for со счетчиком, он запустит Cargo. Как фаза прединтеграционного тестирования зависит от самого кода? - person Robert Mandeville; 02.05.2012
comment
Голод? Если Maven разветвляет запуск Cargo в другой поток или процесс, возможно, он попадет в ваш цикл до того, как Cargo сможет запуститься, что связывает ЦП и предотвращает что-либо еще. Можете ли вы попробовать Thread.sleep(50) где-нибудь в вашем цикле, чтобы сделать его менее ресурсоемким? (Это просто выстрел в темноте, на самом деле.) - person Ryan Stewart; 02.05.2012
comment
Наконец-то понял. Ошибка новичка. Если вы посмотрите на pom выше, вы увидите, что я привязал Cargo:start к фазе интеграционного тестирования, а не к фазе предварительного интеграционного тестирования. Извините за пустую трату полосы пропускания. - person Robert Mandeville; 02.05.2012