Отказоустойчивый плагин не будет работать на одном проекте, но будет работать на другом - почему?
Это сводит меня с ума. Отказоустойчивый плагин 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 еще не доступен.