Я не очень разбираюсь в Maven, и его логика компиляции и упаковки приводит меня в замешательство.
У меня есть некоторые зависимости, объявляемые как:
<dependency>
<groupId>com.dependency_group</groupId>
<artifactId>dependency_1</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.dependency_group</groupId>
<artifactId>dependency_2</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
Итак, насколько я понимаю,dependency_1
будет добавлено в classpath моей программы как что-то, что идет вместе с моим jar, а dependency_2
, с другой стороны, будет добавлено в classpath как что-то, что система выполнения обеспечит при развертывании.
Затем я запускаю цель package
Maven, и ни одна из моих зависимостей не упакована с моим кодом (я использую плагин shade
, но даже без него ничего не меняется).
Я ожидал, чтокогда какая-то зависимость установлена как compile
scope
, она будет экспортирована с моим скомпилированным кодом, начиная с AFAICS, нет смысла устанавливать classpath, говоря, что зависимость придет вместе с моим кодом, а Maven просто не упаковывает этозависимость с ним.Мне кажется, что Мейвен не подчиняется своему контракту.
Итак:
1 - Какая логика стоит за этим?
2 - Нужно ли мне всегда использовать плагин Assembly?
3 - Есть ли случаи, когда люди будут определять зависимость как compile
и не захотят, чтобы она была упакована в jar
?