Как включить модульные тесты в сборку maven?
Причина: наш проект использует Ant как интерфейс командной строки. Сделав новую сборку с плагином сборки maven, я хочу сделать начальные тесты, чтобы проверить, правильно ли они собраны. Поэтому мне нужно включить модульные тесты в окончательную сборку. После сборки начальные тесты затем будут называться sth like
> ant initTest
build.xml
<target="initTest">
<junit>
<test class="MyTest" />
</junit>
</target>
Проблема заключается в следующем:
Я хочу сохранить тесты модуля в src/test/java и не переместить их в src/main/java.
Есть ли способ рассказать плану сборки, чтобы он включал мои модульные тесты? Простое включение в дескриптор сборки не делает этого...
Ответы
Ответ 1
Есть два шага:
- Пакет тестов в банку, а также основной код.
- Зависит от этого баннера "-tests" в модуле, который делает сборку.
Чтобы упаковать тесты, вам нужно выполнить бит jar: test-jar. например.
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>test-jar</id>
<phase>package</phase>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Затем в модуле сборки вы можете зависеть от полученного артефакта.
<dependencies>
<dependency>
<groupid>${project.groupId}</groupId>
<artifactId>some-artifact</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
</dependency>
</dependencies>
Ключевым битом является "классификатор".
Ответ 2
Ответ от Доминика-Митчелла не работал у меня вообще. В конечном итоге было добавлено fileSet
для тестовых классов для моей сборки xml. Обратите внимание, что каталоги fileSet отличаются друг от друга! Это сильно заглохло меня.
Используйте ${project.build.directory}
для тестовых классов и ${project.build.outputDirectory}
для основного:
<?xml version='1.0' encoding='UTF-8'?>
<assembly>
<id>toolbar-test</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}/test-classes</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<scope>runtime</scope>
<unpack>true</unpack>
<unpackOptions>
<excludes>
<exclude>**/LICENSE*</exclude>
<exclude>**/README*</exclude>
</excludes>
</unpackOptions>
</dependencySet>
<dependencySet>
<scope>test</scope>
<unpack>true</unpack>
</dependencySet>
</dependencySets>
</assembly>
Кредит, в котором должен быть кредит - я нашел это решение в этом блоге здесь: http://alexgaddie.blogspot.com/2010/02/creating-uber-jar-with-maven.html
Мне не нужна часть сообщения profile
в блоге.
Ответ 3
Для нас работает следующее.
pom.xml
фрагмент:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
assembly.xml
фрагмент:
<dependencySets>
<dependencySet>
<outputDirectory>/lib</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<useProjectAttachments>true</useProjectAttachments>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
Ключ тега useProjectAttachments
.