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

Разделить тестовые ресурсы между maven-проектами

Существует четкое решение для совместного использования общего тестового кода между maven-проектами с использованием test-jar цели плагина maven-jar-plugin (см. здесь).

Мне нужно сделать то же самое с тестовыми ресурсами, в частности, я хочу, чтобы тестовые ресурсы проекта A были доступны в пути к классам проекта B во время тестирования.

Для проекта A нужно объявить:

<!-- Package and attach test resources to the list of artifacts: -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <jar destfile="${project.build.directory}/test-resources.jar">
                        <fileset dir="${project.basedir}/test-resources" />
                    </jar>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>attach-artifact</goal>
            </goals>
            <configuration>
                <artifacts>
                    <artifact>
                        <file>${project.build.directory}/test-resources.jar</file>
                        <type>jar</type>
                        <classifier>test-resources</classifier>
                    </artifact>
                </artifacts>
            </configuration>
        </execution>
    </executions>
</plugin>

И в проекте B это будет нормальная зависимость:

<dependency>
    <groupId>myproject.groupId</groupId>
    <artifactId>myartifact</artifactId>
    <version>1.0-SNAPSHOT</version>
    <classifier>test-resources</classifier>
    <scope>test</scope>
</dependency>

Вопрос: Должен ли он работать во всех случаях? Возможно ли упаковать ресурсы без maven-antrun-plugin (используя более "легкий" плагин)?

4b9b3361

Ответ 1

Просто используйте jar:test-jar и объявите полученный JAR как зависимость (см. это руководство для получения более подробной информации). И хотя я не понимаю проблему наличия ресурсов и в этой банке, вы всегда можете исключить все файлы .class:

<project>
  <build>
    <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>2.2</version>
       <executions>
         <execution>
           <goals>
             <goal>test-jar</goal>
           </goals>
         </execution>
       </executions>
       <configuration> 
         <excludes>
           <exclude>**/*.class</exclude>
         </excludes>
       </configuration> 
     </plugin>
    </plugins>
  </build>
</project>

И использовать его:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>com.myco.app</groupId>
      <artifactId>foo</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project>

Ответ 2

Принятый ответ помог мне, но это не совсем точно, если вам нужна регулярная банка того же проекта. Он удалит файлы *.class из обоих банок.
Ниже приведенные настройки переходят к следующему:

  • создайте мне 2 баночки, 1 обычный, 1 тест;
  • удалять файлы *.class, но только из тестовой банки

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
            <execution>
                <goals>
                    <goal>test-jar</goal>
                </goals>
                <configuration>
                    <excludes>
                        <exclude>**/*.class</exclude>
                    </excludes>
                </configuration>
            </execution>
        </executions>
    </plugin>

Ответ 3

Уже существует цель построить тестовую банку из maven.

Предполагая, что вам нужно что-то более гибкое, вы можете использовать плагин jar для упаковки ваших тестовых ресурсов и выполнения этой цели с главной целью пакета с чем-то вроде этого.

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>jar</goal>
            </goals>
            <configuration>
              <classifier>test-resources</classifier>
              <includes>
                <include>**/*.whatever-you-want</include>
              </includes>
            </configuration>
          </execution>
        </executions>
      </plugin>

Все, что вы хотите связать, будет добавлено в project-name-version-test-resources.jar, когда будет запущена цель jar.

Затем вы можете включить его в проект через ту же самую зависимость, которую вы использовали выше.

Ответ 4

Используя maven-dependency-plugin, мы можем поместить нужный ресурс в нужную директорию, требуется только изменение pom в зависимом проекте:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-dependency-plugin</artifactId>
   <executions>
      <execution>
         <phase>generate-test-resources</phase>
         <goals>
            <goal>unpack</goal>
         </goals>
         <configuration>
            <artifactItems>
               <artifactItem>
                  <groupId>dependeeGroupId</groupId>
                  <artifactId>dependeeArtifactId</artifactId>
                  <version>dependeeVersion</version>
                  <type>test-jar</type>
                  <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
                  <includes>resourceNeeded.txt</includes>
                  <overWrite>true</overWrite>
               </artifactItem>
            </artifactItems>
         </configuration>
      </execution>
   </executions>
</plugin>

type используется для получения тестового ресурса
outputDirectory используется для определения ресурса, пригодного для использования в тестах

Документация здесь: https://maven.apache.org/plugins/maven-dependency-plugin/unpack-mojo.html