Я пытаюсь выполнить параллельные тесты с использованием компонентов Maven InvocationRequest, Invoker и InvocationResult , которые являются частью зависимости maven-invoker, добавленной в pom.
В конечном счете, я хочу, чтобы Jenkins запустил исполняемый файл jar, который, в свою очередь, выполняет параллельные тесты.Код для программного запуска Maven для запуска тестов выглядит следующим образом:
InvocationRequest request = new DefaultInvocationRequest();
request.setPomFile( new File("pom.xml") ); //pom is in the root level of the project
request.setShowErrors(true);
List<String> goalList = Arrays.asList("clean","install");
request.setGoals( goalList );
Invoker invoker = new DefaultInvoker();
invoker.setMavenHome(new File(System.getenv("MAVEN_HOME")));
InvocationResult result = null;
try {
result = invoker.execute( request );
} catch (MavenInvocationException e) {
e.printStackTrace();
}
if ( result.getExitCode() != 0 )
{
throw new IllegalStateException( "Build failed." );
}
Этот код находится в основном классе (т. Е. public static void main (String [] args ))которая служит точкой входа при запуске скомпилированного исполняемого JAR.Идея состоит в том, что Дженкинс запустит что-то похожее на это - >> " java -jar MyCompiledTests.jar " ... и это запустит приведенный выше код, который позволит тестам выполняться параллельно.
Это работает, пока я использую местоположение pom, в котором находятся исходные файлы проекта.Но мне нужно скомпилировать JAR, который будет работать на сервере интеграции и будет запускаться Jenkins ежедневно (я делаю это с текущим набором тестов, но в настоящее время они все работают последовательно).Кажется, что когда я собираю исполняемый JAR-файл (используя maven-assembly-plugin), файл pom к нему не добавляется.
Таким образом, приведенный выше код, для которого требуется для доступа к pom, выдаст ошибку, говорящую о том, что не может найти pom.Чтобы исправить это, я вручную добавил файл pom, чтобы он находился рядом с JAR в заданной удаленной папке, но затем при запуске этого механизма я получаю сообщение об ошибке, касающееся отсутствия папки Features.
Эта ошибка возникает, когда во время выполнения pom достигается плагин Cucumber-JVM-параллельный .Получение этой ошибки связано с тем, что файл pom теперь читается, но различные ссылки на пути в этом плагине не распознаются, поскольку они относятся к расположению исходных папок проекта в Eclipse , а не к новомурасположение удаленной папки рядом с исполняемым JAR.
Опять же, я могу отлично запускать вещи в Eclipse и даже запускать скомпилированный исполняемый JAR, если могу указать файл pom, который находится в исходной папке проекта.
Вопрос:
- Как можно скомпилировать и запустить автономный исполняемый JAR-файл, чтобы он мог вызывать Maven для запуска параллельных тестов, настроенных Cucumber-JVM-параллельно-плагин?
- Как по-разному ссылаться на pom в приведенном выше коде?
- Может ли pom быть помещен в исполняемый файл JAR при компиляции ... или это должно быть?
- Есть ли более элегантный способ скомпилировать и запустить исполняемый файл JAR
Я искал повсюду, но либо не вижу ответа прямо передо мной, либо мои предполагаемые цели для этогоисполняемый файл JAR недостижим, учитывая текущее состояние maven технологий.