У меня есть два проекта, 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>
Это приводит к развертыванию исходного jar с другим именем: com.example-foo.jar
и не развертывает тестовый jar. Я также попытался использовать <classifier>
вместо <type>
в зависимости, но он все еще делает то же самое. Я попытался использовать вышеуказанную зависимость вне профиля (вместе с другими), но она все еще ведет себя так же.
Если я добавлю <type>
к основной зависимости (без добавления другой зависимости), я получу развернутый тестовый jar (с тем же именем, что и выше), но источник, естественно, не будет развернут.
Единственное отличие от написанного в документации заключается в том, что область действия не указана для тестовой зависимости. Это работает только для области test
? Можно ли как-то по-другому развернуть тестовые классы.
Я знаю, что вопрос немного запутанный, пожалуйста, дайте мне знать, если я могу кое-что прояснить.
Спасибо!
Обновление:
Я попробовал еще несколько способов, но все равно не получится.
Я добавил еще одно выполнение в maven-jar-plugin в проекте foo
(зависимость, а не основной веб-проект), в котором я надеялся заставить maven скомпилировать тестовые классы в том же jar-файле, что и основные. и ссылаться на большой комплект другим классификатором. Я не мог заставить его работать:
<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
.
Делая это, я понял, что это не зависит от отношения test-jar
type / tests
classifier / test
scope. Когда я попытался указать новую банку, которую я строю, помимо основной, я получил то же поведение, что и при попытке включить банку -tests
. Я проверил локальный репозиторий maven, и все jar-файлы зависимого проекта устанавливаются нормально, поэтому проблема заключается в разрешении зависимостей основного проекта.
ТЛ; др
Все сводится к вопросу, можете ли вы включить одну и ту же зависимость в несколько классификаторов. Из того, что я видел до сих пор, ответ - нет - я всегда получаю банку com.example-foo
при указании одной и той же зависимости несколько раз с разными классификаторами.