Подтвердить что ты не робот

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?

4b9b3361

Ответ 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.