Maven (Surefire): копировать тестовые ресурсы из src/test/java
Плагин Maven 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
?
Ответы
Ответ 1
Копирование ресурсов выполняется с помощью модуля maven-resource-plugin, и если вы прочитаете его, вы увидите, как добавить копирование ресурсов из src/test/java.
См. http://maven.apache.org/plugins/maven-resources-plugin/testResources-mojo.html для цели тестовых ресурсов, которая включена в жизненный цикл по умолчанию.
И затем посмотрите http://maven.apache.org/pom.html и найдите <testResources>
.
Ответ 2
bmargulies дал ответ, но позвольте мне заполнить некоторые детали.
<testresources>
можно добавить в узел <build>
POM проекта, например так:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
</testResources>
Это копирует все в src/test/java
- включая исходный код .java
, который нам не нужен.
Он также (как только подсказывает bmargulies) переопределяет и заменяет настройку <testResources>
по умолчанию в стандартном родительском POM, от которого наследуются все остальные POM (если только это наследство не изменено). Стандартный родительский src/test/resources
копирует src/test/resources
, поэтому, переопределяя это, мы не копируем это как обычно, а нам не нужно. (В частности, вся моя причина для этого состоит в том, чтобы использовать unitils, который хочет unitils.properties
файл 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>
Ответ 3
Единственный способ, которым я работал, когда я помещал свою тестовую конфигурацию в папку 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>
Ответ 4
Можно ли получить maven для копирования ресурсы из src/test/java?
Да, это легко достигается с помощью antrun plugin.
Ответ 5
Вы можете попробовать использовать модуль сборки Helper Maven Plugin см. пример использования здесь