Я использую плагин Shade maven для сборки своего проекта, чтобы все его зависимости были включены в один jar (это упрощает его запуск в Hadoop). Похоже, Shade по умолчанию исключает мой тестовый код, что понятно. Поскольку я хотел бы запустить интеграционные тесты для своего кластера, я надеюсь настроить другой профиль для создания отдельной банки для этой цели. Есть ли способ настроить этот плагин так, чтобы он также включал тестовый код?
Как я могу настроить плагин maven shadow для включения тестового кода в мою банку?
Ответы (5)
В версии 2.2 плагина maven-shade-plugin была добавлена опция «shadeTestJar» (см. MSHADE-158): http://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html#shadeTestJar
Тем не менее, я пытался использовать это и не мог заставить его работать. Вот мой конфиг плагина:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadeTestJar>true</shadeTestJar>
</configuration>
</execution>
</executions>
</plugin>
В файле "...-tests.jar" нет записей, но основной затененный jar выглядит нормально (хотя в нем нет тестовых классов).
Кроме того, этот вопрос дублирует этот другой вопрос, хотя принятый ответ не совсем удовлетворяет: Как включить тестовые классы в Jar, созданные maven-shade-plugin?
Эти последние пару ответов в лучшем случае представляют собой запутанные обходные пути для сломанной функции. Дело в том, что в maven-shade-plugin
есть ошибка. Тем временем я исследовал и устранил причину ошибки, а также создал заплату. Теперь я надеюсь, что кто-то в Apache скоро включит его, и тогда, наконец, функция shadeTestJar
сможет работать так, как должна.
Мне удалось заставить его работать, добавив:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.basedir}/src/test/java/</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
Попробуйте include
создать свои тестовые пакеты следующим образом:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>org.apache.maven:*</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
Использование maven-shade-plugin
, как объяснил ~steve-k выше, правильно, но, к сожалению, из-за ошибки shadeTestJar
не работает, и полученный тестовый JAR пуст.
<plugin> <artifactId>maven-jar-plugin</artifactId> <executions> <execution> <id>test-jar</id> <phase>package</phase> <goals> <goal>test-jar</goal> </goals> </execution> </executions> </plugin>
Зависит от этой тестовой банки с классификатором тестов:<dependency> <groupId>com.abc</groupId> <artifactId>blah</artifactId> <version>1.0</version> <classifier>tests</classifier> <scope>test</scope> </dependency>
- person Patrick Marchwiak   schedule 28.10.2011