Maven (Surefire): копировать тестовые ресурсы из SRC / Test / Java
-
26-09-2019 - |
Вопрос
Maven's Surefire (тестирование) плагинmvn test-compile
Копирует файлы в src/test/resources
к target/test-classes
. Отказ Это компилируется .java
в src/test/java
, и копирует собранный .class
Файлы к target/test-classes
.
Но это не копирует ресурсы из src/test/java
, и удобнее быть в состоянии поставить тестовые ресурсы в том же каталоге, что и .java
классы они являются ресурсами, чем в параллельной иерархии в src/test/resources
.
Можно ли получить Maven для копирования ресурсов из src/test/java
?
Решение
Копирование ресурсов все выполнено плагином Maven-Resource-Resource, и если вы прочитаете его документы, вы увидите, как добавить копирование ресурсов из SRC / Test / Java.
Видеть http://maven.apache.org/plugins/maven-resources-plugin/tetestresources-mojo.html. Для цели тестовых ресурсов, которая включена в жизненный цикл по умолчанию.
А потом посмотрите http://maven.apache.org/pom.html., и искать <testResources>
.
Другие советы
Bmargulies дал ответ, но позвольте мне заполнить некоторые детали.
<testresources>
может быть добавлен к <build>
Узел POM проекта, как это:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
</testResources>
Что копирует все в src/test/java
-- в том числе .java
Исходный код, который мы не хотим.
Это также (как Bmargulies только намекало на) переопределяют и заменяет по умолчанию <testResources>
Установка в стандартном родительском POM, что все остальные пома наследуют от (если только это наследование не изменено). Стандартные родительские копии src/test/resources
, Поэтому, переопределяя это, мы не получаем это скопированные как обычно, которые мы не хотим. (В частности, вся вся вся причина для этого является использование мониторов, которые хотят unitils.properties
файл скопирован - и это (для меня, в любом случае) в src/test/resources
.
Итак, мы снова добавляем src/test/resources
:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Что копии в указанном порядке, так что для файлов, которые существуют в обоих /src/test/java
(и подкаталоги) и в /src/test/resources
(и подкаталоги), src/test/resources
Версия - это тот, который заканчивается в test-classes
.
Теперь нам просто нужно нет скопировать .java
Файлы:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Единственный способ, которым он работал для меня, когда я положил свою конфигурацию теста в src/test/resources
папка (аналог src/test/java
Для исходных файлов). Файлы из этой папки копируются на target/test-classes
Папка, которая находится на классе во время выполнения тестов. Я не знаю почему, но следующий конфиг не работал для меня:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Можно ли получить Maven для копирования ресурсов из SRC / Test / Java?
Да, это легко достигается с Antrun Plugin.