barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

вторник, 15 января 2013 г.

Maven: создание тестового окружения для тестирования war-проекта, использующего overlays при сборке

Задача:

Есть проект, собираемый maven`ом, а точнее, maven-war-plugin`ом. У проекта есть несколько zip-зависимостей с ресурсами, распаковываемыми в WEB-INF/classes при создании war`ника (при помощи overlays). Задача состоит в том, чтобы при запуске unit-тестов также распаковывать эти зависимости куда-нибудь в тестовый classpath (например, в target/test-classes), чтобы для тестов формировалось окружение, аналогичное тому, что будет после запаковки в war.

Решение:

Для копирования ресурсов для тестов (и не только), можно воспользоваться maven-resources-plugin`ом. Вот только он умеет копировать файлы только из папки А в папку В, и про зависимости ничего не знает. Для работы с зависимостями есть плагин maven-dependency-plugin, а для распаковки ресурсов из зависимостей подойдет его гол "unpack". В моем случае он должен отрабатывать на фазе "process-test-resources" (когда тестовые классы уже скомпилированы и помещены в ${basedir}/target/test-classes). В итоге фрагмент pom`ки, отвечающий за распаковку ресурсов из zip-зависимостей, выглядит так:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
 <execution>
<id>copy-war-or-zip-resources-for-test</id>
<phase>process-test-resources</phase>
<goals>
 <goal>unpack</goal>
</goals>
<configuration>
 <outputDirectory>${basedir}/target/test-classes</outputDirectory>
 <artifactItems>
<artifactItem>
 <groupId>my.dep.group.id</groupId>
 <artifactId>artifact-id</artifactId>
 <classifier>resources</classifier>
 <type>zip</type>
</artifactItem>
<!-- ... -->
 </artifactItems>
 <excludes>my-exluded.properties</excludes>  
</configuration>
 </execution>
</executions>
</plugin>    
Правда, гибкость в данном случае, по сравнению с overlays, теряется, т.к. overlays позволяет указывать исключения для каждой зависимости, а  unpack - только для всех сразу.
PS А maven-resources-plugin пойдет для использования в качестве замены webResources в maven-war-plugin. Использовать его нужно на той же фазе process-test-resources.

Комментариев нет:

Отправить комментарий