maven-jar-plugin: как создать другое имя артефакта для тестов? - PullRequest
1 голос
/ 15 марта 2020

Допустим, я установил следующий плагин в файл pom. xml:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>make-a-jar</id>
            <phase>compile</phase>
            <goals>
              <goal>jar</goal>
            </goals>
            <configuration>
               <finalName>my-artifact-name</finalName>
            </configuration>
          </execution>
        </executions>
      </plugin>

и запускаю «mvn clean install». Maven создает два файла JAR в целевой библиотеке. Первый файл JAR компилирует исходные файлы, а второй файл JAR компилирует тестовые файлы. Оба этих jar будут иметь одинаковое имя артефакта .

Если я хочу использовать jar исходного кода в качестве зависимости в другом проекте, я могу поместить следующую зависимость в другой проект :

   <dependency>
      <groupId>groupId</groupId>
      <artifactId>my-artifact-name</artifactId>
      <scope>system</scope>
      <type>jar</type>
      <systemPath>${basedir}/lib/my-artifact-name.jar</systemPath>
   </dependency>

Пока все хорошо.

Проблема возникает, если я также хочу добавить зависимость для тестовых файлов. В этом случае у меня будут две зависимости с одним и тем же groupId и artifactId и разными systemPath. Maven не будет читать две зависимости с одинаковыми groupId и artifactId. Только один из них будет прочитан.

Одно из решений, которое я могу придумать, - заставить Maven дать другое имя артефакта для тестирования. Вы знаете, как это сделать?

1 Ответ

2 голосов
/ 15 марта 2020

Мой общий ответ на этот вопрос будет следующим:

Тесты в src/test/java предназначены только для запуска их во время сборки. Их не нужно помещать в любой jar.

Если вам нужны классы в качестве вспомогательных классов для ваших тестов, вы можете создать отдельный jar, содержащий эти классы. Затем это можно использовать как test зависимость.

В любом случае, старайтесь избегать <systemPath>. Если вы строите свой проект с mvn clean install на своем компьютере, вы можете ссылаться на полученный jar с зависимостью, такой как

   <dependency>
      <groupId>groupId</groupId>
      <artifactId>my-artifact-name</artifactId>
      <version>1.2.3</version>
   </dependency>

, где угодно на одной учетной записи / компьютере, без указания <systemPath>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...