Я пытаюсь выполнить следующий сценарий, используя maven:
- этап предварительной интеграции: запуск приложения на основе Java с использованием основного класса (с использованием exec-maven-plugin)
- этап интеграции: запуск тестов интеграции (с помощью maven-failsafe-plugin)
- Фаза после интеграции: корректно остановите приложение (используя exec-maven-plugin)
Вот фрагмент pom.xml:
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>launch-myApp</id>
<phase>pre-integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<arguments>
<argument>-DMY_APP_HOME=/usr/home/target/local</argument>
<argument>-Djava.library.path=/usr/home/other/lib</argument>
<argument>-classpath</argument>
<classpath/>
<argument>com.foo.MyApp</argument>
</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<forkMode>always</forkMode>
</configuration>
</plugin>
</plugins>
Если я выполняю mvn post-интеграционный тест, мое приложение запускается как дочерний процесс процесса maven, но процесс приложения блокирует процесс maven от выполнения интеграционных тестов, что происходит на следующем этапе. Позже я обнаружил, что в плагине maven exec есть ошибка (или отсутствует функциональность?) , из-за которой процесс приложения блокирует процесс maven. Чтобы решить эту проблему, я инкапсулировал вызов MyApp.java в сценарии оболочки, а затем добавил «/ dev / null 2> & 1 &», чтобы создать отдельный фоновый процесс. Вот фрагмент (это всего лишь фрагмент, а не фактический) из runTest.sh:
java - DMY_APP_HOME =$2 com.foo.MyApp > /dev/null 2>&1 &
Хотя это решает мою проблему, есть ли другой способ сделать это? Мне не хватает аргумента для exec-maven-plugin?