2010-02-11 2 views
39

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

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

Для проекта Один необходимо объявить:

<!-- 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> 

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

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

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

+0

Кажется есть необходимо улучшить удаленный плагин ресурсов для тестовых ресурсов - http://maven.apache.org/plugins/maven-remote-resources-plugin/index.html – cetnar

+0

@centar: спасибо за интересную информацию о плагинах, хотя, что вы сказали бит offtopic :) –

ответ

33

Просто используйте jar:test-jar и объявите полученный JAR как зависимость (подробнее см. В разделе this guide). И хотя я не понимаю проблему наличия ресурсов и классов в этом банке, вы всегда можете исключить все файлы .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> 
+0

Не следует ли установить фазу выполнения для упаковки? – sal

+1

@sal Это потому, что 'jar: test-jar' *" связывается по умолчанию с фазой жизненного цикла: 'package'." * –

+0

@Pascal: Спасибо за подсказку. Я согласен, что имеет смысл распределять ресурсы с помощью классов. +1 для вашего ответа, однако на исходные вопросы не ответил (как распределить тестовые ресурсы по отдельности наиболее оптимальным образом?). –

0

Уже существует цель построить test jar от 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> 

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

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

+0

Выполнение цели 'jar' автоматически связывает' maven-jar-plugin' с "классами d «каталог», а не «каталог тестовых классов». Таким образом, выше будет пакет просто нормальных классов, а 'include' не поможет всем ресурсам тестирования для артефакта. Извините, но «-1». –