Мы используем Знатока exec:java
цель запустить пользовательское JAVA-приложение, которое настраивает базу данных для использования с нашими интеграционными тестами. Мы хотим использовать exec:java
exec:exec
смочь использовать зависимости проекта в пути к классу основного класса, который будет использоваться. Несколько раз приложение перестало работать по допустимым причинам, но сборка Знатока продолжалась, как будто ничто не пошло не так, как надо.
Есть ли любой "failonerror" аргумент типа, который может использоваться с exec:java
? Я боюсь добавить system.exit()
коды к выполняемому классу, поскольку я подозреваю это, уничтожат не только себя, но также и Знатока сам, из-за того, что это выполняет в Знатоке VM.
Я только что сделал простой тест со следующей конфигурацией плагина, объявленной в POM:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>my-exec-java</id>
<phase>pre-integration-test</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.example.Main</mainClass>
</configuration>
</plugin>
...
</plugins>
...
</build>
</project>
И следующим классом Java:
package com.example;
public class Main {
public static void main(String[] args) {
throw new RuntimeException("A problem occured");
}
}
И вот что я получаю при вызове фазы integration-test
:
$ mvn clean integration-test [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building q2363055 [INFO] task-segment: [clean, integration-test] [INFO] ------------------------------------------------------------------------ ... [INFO] [jar:jar {execution: default-jar}] [INFO] Building jar: /home/pascal/Projects/stackoverflow/q2363055/target/q2363055-1.0-SNAPSHOT.jar [INFO] Preparing exec:java [WARNING] Removing: java from forked lifecycle, to prevent recursive invocation. [INFO] No goals needed for project - skipping [INFO] [exec:java {execution: my-exec-java}] [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] An exception occured while executing the Java class. null A problem occured [INFO] ------------------------------------------------------------------------ [INFO] For more information, run Maven with the -e switch [INFO] ------------------------------------------------------------------------ [INFO] Total time: 19 seconds [INFO] Finished at: Tue Mar 02 23:40:32 CET 2010 [INFO] Final Memory: 16M/79M [INFO] ------------------------------------------------------------------------
Фаза integration
никогда не выполняется из-за ошибки сборки.
Итак, вопрос в том, как вы обрабатываете ошибки в классе Java, который загружает вашу базу данных? Является ли выброс исключения вариантом?
Эта функция не предусмотрена по умолчанию, но вы можете запросить ее. на http://jira.codehaus.org/browse/MEXEC , так как это было бы простое добавление.
Если вы хотите, чтобы exec: java
завершился ошибкой сборки, вызов main
должен будет генерировать исключение вместо того, чтобы возвращать ненулевой код выхода.
Если это не вариант, вы все равно можете использовать exec: exec
- см. http://mojo.codehaus.org/exec-maven-plugin/examples/example-exec-for -java-programs.html для описания того, как добавить зависимости проекта в путь к классам.
Другой вариант, если по какой-то причине ни один из этих вариантов не подходит, - это использование подключаемого модуля AntRun с задачей
. Зависимости проекта также могут быть переданы в это.