Отказоустойчивый плагин не будет работать на одном проекте, но будет работать на другом - почему?

Это сводит меня с ума. Отказоустойчивый плагин Maven не будет работать на моем проекте. Если я бегу mvn verify работает только верный. Если я наберу mvn failsafe:verify происходит сбой со следующей ошибкой:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Simulation Experiment Server 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-failsafe-plugin:2.11:verify (default-cli) @ experiment-server ---
[INFO] Failsafe report directory: C:\IdeaProjects\experiment_server\target\failsafe-reports
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.551s
[INFO] Finished at: Fri Mar 30 11:24:58 GMT-06:00 2012
[INFO] Final Memory: 5M/15M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.11:verify (default-cli) on project experiment-server: C:\IdeaProjects\experiment_server\target\failsafe-reports\failsafe-summary.xml (The system cannot find the path specified) -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Жалуется на то что не нашел failsafe-summary.xml, Но это должно быть создано плагином. И плагин работает нормально (и создает failsafe-summary.xml файл, если я запускаю запустить замечательный пример проекта Arquillian Антонио Гонсалвес.

Поэтому я скопировал точную информацию о плагине, которую использует Антонио, и он все равно не будет работать в моем проекте. Я смоделировал мой POM, чтобы он был точно таким же, как у него (за исключением родительского pom) - что-то идет не так, я просто не знаю, что. Почему отказоустойчивый будет работать на его проекте, а не на моем??

Вот моя запись failsafe pom.xml, которая взята прямо у него и такая же, как и на сайте failsafe usaages):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>${version.maven.failsafe.plugin}</version>
    <configuration>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Спасибо за любую помощь, это сводит меня с ума.

ОБНОВЛЕНИЕ Хорошо, я, кажется, получил cannot find failsafe-summary.xml проблема исправлена ​​- я меняю свой каталог с experiment_server в experiment-server, Я предполагаю, что это портит отказоустойчивость.

Но у меня все еще возникают проблемы с обеспечением безопасности при запуске из команды mvn verify или же mvn integration-test, Обе эти команды вызывают верный, а не отказоустойчивый. Теперь я могу запустить failsafe напрямую с помощью команды: mvn failsafe:integration-test, но не должен работать автоматически с mvn verify? мой mvn help:effective-pom показывает, что отказоустойчивость есть, так что это не проблема... Есть идеи?

4 ответа

Решение

Взгляните на отказоустойчивые документы для имен тестов failsafe ожидает по умолчанию:

<includes>
  <include>**/IT*.java</include>
  <include>**/*IT.java</include>
  <include>**/*ITCase.java</include>
</includes>

Ваши тесты названы в соответствии с одним из этих шаблонов? Если нет, попробуйте определить <includes> элемент в конфигурации плагина. Или измените названия тестов, чтобы они соответствовали шаблону по умолчанию.


Хорошо, теперь, когда мы проверили имена тестовых классов - обычно, когда я добавляю исполнения в конфигурацию плагина, я делаю это примерно так:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>${version.maven.failsafe.plugin}</version>
    <configuration>
    </configuration>
    <executions>
        <execution>
            <id>failsafe-integration-tests</id>
            <phase>integration-test</phase>
            <goals>
                <goal>integration-test</goal>
            </goals>
        </execution>
        <execution>
            <id>failsafe-verify</id>
            <phase>verify</phase>
            <goals>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Это явно связывает failsafe цели плагина, которые вы хотите запустить на правильных фазах жизненного цикла сборки. Я верю surefire плагин связан с test фаза жизненного цикла по умолчанию (для jar, war и ejb в любом случае), но ничто не связано с integration-test или же verify,

Здесь я поделюсь своими 2 центами. У меня была та же самая проблема, и решение выше не решило мою проблему.

У меня был maven-failsafe-plugin, инкапсулированный в тег pluginManagement. Я заметил, что вместо этого переместил его в тег plugins, когда увидел этот документ в схеме maven 4.0.0:

Информация о подключаемом модуле по умолчанию должна быть доступна для ознакомления по проектам, полученным из этого. Эта конфигурация плагина не будет разрешена или привязана к жизненному циклу, если на нее нет ссылок. Любая локальная конфигурация для данного плагина переопределяет полное определение плагина здесь.

Надеюсь, это дополнительная информация. решает больше проблем с госзакупками, как я.

Для меня это сработало только после того, как я добавил "стандартные" включения.

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.15</version>
        <configuration>
            <includes>
                <include>**/IT*.java</include>
                <include>**/*IT.java</include>
                <include>**/*ITCase.java</include>
                <include>**/IntegrationTest*.java</include>
            </includes>
        </configuration>
        <executions>
            <execution>
                <id>failsafe-integration-tests</id>
                <phase>integration-test</phase>
                <goals>
                    <goal>integration-test</goal>
                </goals>
            </execution>
            <execution>
                <id>failsafe-verify</id>
                <phase>verify</phase>
                <goals>
                    <goal>verify</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

Если вы используете версию 2.12.2 плагина failsafe, это нормально. Переключиться на предыдущую версию. Кажется, 2.13 еще не доступен.

Jira ссылка

Другие вопросы по тегам