Maven (Surefire): копировать тестовые ресурсы из src / test / java - PullRequest
34 голосов
/ 19 ноября 2010

Плагин 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?

Ответы [ 4 ]

38 голосов
/ 06 августа 2013

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, поэтому, переопределив это, мы не получим то, что обычно копируем, а мы этого не хотим. (В частности, вся моя причина для этого состоит в том, чтобы использовать unitils, который хочет скопировать файл 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>
19 голосов
/ 19 ноября 2010

Все ресурсы копирования выполняются плагином 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 голосов
/ 15 августа 2014

Единственный способ, которым я работал, когда я помещал тестовую конфигурацию в папку 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>
0 голосов
/ 19 ноября 2010

Возможно ли заставить maven копировать ресурсы из src / test / java?

Да, это легко достигается с помощью плагина antrun .

...