У меня есть два проекта: foo и foo-web в группе com.example. foo-web зависит от foo.
Чтобы иметь возможность разрабатывать часть пользовательского интерфейса приложения, не завися от внешних служб, фиктивные DAO были реализованы в foo (они возвращают статические данные, поэтому нам не нужно подключаться к базам данных и т.д.).
Нам нужно было переместить фиктивные классы в src/test/java. Это означает, что они не развертываются с помощью foo.jar в войну, созданную из веб-проекта. Я нашел эти инструкции на сайте maven, но они, похоже, не работают для меня.
В foo pom.xml у меня есть:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>test-jar</id>
<phase>test-compile</phase>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
При запуске mvn install на foo-web, в целевом foo я получаю две банки: foo-1.0.0-SNAPSHOT.jar и foo-1.0.0-SNAPSHOT-tests.jar. Они оба прекрасно устанавливаются в локальном хранилище maven.
До этого, зависимость foo-web выглядела так:
<dependency>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
И это вызовет развертывание foo-1.0.0-SNAPSHOT.jar в войне. Теперь я хочу также развернуть банку -tests, желательно только для "локального" профиля.
Я пытался разными способами:
<profile>
<id>local</id>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>test-jar</type>
</dependency>
</dependencies>
</profile>
Это приводит к тому, что исходная банка развертывается с другим именем: com.example-foo.jar и не развертывает тестовую банку. Я также попытался использовать <classifier> вместо <type> в зависимости, но он все равно делает то же самое. Я попытался использовать вышеупомянутую зависимость вне профиля (наряду с другими), но он по-прежнему ведет себя одинаково.
Если я добавлю <type> к основной зависимости (без добавления другой зависимости), я получаю развернутую тестовую банку (с тем же именем, что и выше), но источник, естественно, не развертывается.
Единственное отличие от того, что написано в документации, это тот факт, что область не определена для тестовой зависимости. Он работает только для области test? Могу ли я каким-то образом развернуть тестовые классы по-разному.
Я знаю, вопрос немного запутанный, пожалуйста, дайте мне знать, если есть что-то, что я могу уточнить.
Спасибо!
Обновление:
Я попробовал его еще несколькими способами, но он все равно не сработает.
Я добавил еще одно исполнение в maven-jar-plugin в проекте foo (зависимость, а не основной веб-проект), в котором я надеялся заставить maven скомпилировать тестовые классы в той же банке, что и основные и ссылаться на большой пакет другим классификатором. Я не мог заставить его работать:
<execution>
<id>local-build</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>batman</classifier>
<directory>${basedir}/src/test/java</directory> <!-- tried several variations here -->
<includes>
<include>**</include>
</includes>
</configuration>
</execution>
Jar был сгенерирован с помощью классификатора batman, но я не смог найти способ включить его в тестовые классы в цель jar.
Сделав это, я понял, что это не зависит от отношения scope test-jar type/tests classifier/test. Когда я попытался указать новую банку, которую я строил помимо основной, я получил то же поведение, что и при попытке включить банку -tests. Я проверил локальный репозиторий maven, и все банки из зависимого проекта устанавливаются в порядке, поэтому проблема заключается в основном разрешении зависимостей проекта.
TL;DR
Все сводится к вопросу, если вы можете включить ту же зависимость с несколькими классификаторами. Из того, что я видел до сих пор, ответ - нет. Я всегда получаю банку com.example-foo при многократном задании одной и той же зависимости с разными классификаторами.