У меня есть два проекта: 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
при многократном задании одной и той же зависимости с разными классификаторами.