Я использую process-exe c -maven-plugin (bazaarvoice), чтобы выполнить несколько процессов для моих интеграционных тестов. У меня есть некоторые требования моей компании о том, как использовать артефакты. Основной процесс (мой модуль maven) упакован в один jar (пример: my-app-1.0-SNAPSHOT.jar), а остальные зависимости (jars) должны находиться в папке / lib внутри цели. В связи с этим необходимо добавить файл jar и папку / lib в classpath.
<plugin>
<groupId>com.bazaarvoice.maven.plugins</groupId>
<artifactId>process-exec-maven-plugin</artifactId>
<version>0.7</version>
<executions>
<!-- before I have other executions -->
<execution>
<id>demo-process</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<name>demo-process</name>
<processLogFile>${project.build.directory}/logs/my-log.log</processLogFile>
<arguments>
<argument>java</argument>
<argument>-cp</argument>
<argument>${project.artifactId}-${project.version}.jar${path.separator}lib/*</argument>
<argument>com.example.Main</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
Это отлично работает.
Теперь одна из моих зависимостей в папке / lib пытается получить доступ к ресурсу (файлу свойств) моего текущего проекта. Следовательно, мне нужно добавить в classpath папку, в которой находятся мои ресурсы.
<argument>${project.artifactId}-${project.version}.jar${path.separator}lib/*${path.separator}${project.build.testOutputDirectory}/</argument>
Это изменение также отлично работает в моей локальной среде с Windows.
Но когда я запускаю конвейер моего приложения в Jenkins (Linux среда), оно выходит из строя, так как основной класс не найден. Баночка моего приложения (my-app-1.0-SNAPSHOT.jar) теперь не добавляется в путь к классам. Так что он работает нормально в локальном режиме, но всегда терпит неудачу в Jenkins.
Я пробовал разные способы настройки пути к классам в pom с помощью плагина, но всегда терпел неудачу.
У меня есть попробовал с кавычками
<argument>"${project.artifactId}-${project.version}.jar${path.separator}lib/*${path.separator}${project.build.testOutputDirectory}/"</argument>
Также используя $ {project.build.directory}
<argument>${project.artifactId}-${project.version}.jar${path.separator}lib/*${path.separator}${${project.build.directory}/test-classes</argument>
Также изменив порядок
<argument>${project.build.testOutputDirectory}${path.separator}${project.artifactId}-${project.version}.jar${path.separator}lib/*</argument>
Я также пытался удалите * и используйте разные версии плагина 0.8, 0.9. У меня всегда один и тот же результат, он отлично работает в моей локальной среде в Windows, но я не могу заставить java процесс работать в конвейере в Linux.
Есть идеи?