Как включить модульные тесты в сборку Maven? - PullRequest
10 голосов
/ 19 июня 2009

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

> ant initTest

build.xml:

<target="initTest">
  <junit>
   <test class="MyTest" />
  </junit>
</target>

Проблема в том, что: Я хочу сохранить свои юнит-тесты в src / test / java и not переместить их в src / main / java. Есть ли способ сказать плагину сборки включить мои юнит-тесты? Простой , включающий в дескриптор сборки, не делает этого ...

Ответы [ 3 ]

10 голосов
/ 19 июня 2009

Есть два шага:

  1. Упакуйте тесты в банку и основной код.
  2. Зависит от этого "-test" банку в модуле, который делает сборку.

Чтобы упаковать тесты, вам нужно скопировать jar: test-jar goal. например,

<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 голосов
/ 12 июня 2015

Ответ от @ Dominic-Mitchell мне не помог. В итоге получилось добавить 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 часть поста в блоге.

1 голос
/ 25 сентября 2015

У нас работает следующее.

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.

...