#maven #maven-3
#maven #maven-3
Вопрос:
Я изучал область maven и столкнулся с сомнением.
Если область действия всех зависимостей в проекте, скажем A , является compile , то они также будут присутствовать в его jar. Итак, сказано, что для любого другого проекта, скажем, B, который зависит от этого проекта A , также будут получены транзитивные зависимости от A. Но они уже присутствуют в jar проекта A? Зачем загружать их снова?
Ответ №1:
Они не «присутствуют в jar». Транзитивные зависимости jar не объединяются в jar, если вы явно не создаете fat jar, например, с помощью плагина assembly или плагина shade.
Однако Fat jar не предназначены для зависимостей от других артефактов, они предназначены только для автономного запуска.
Для ears и wars ситуация иная (стандарт заключается в объединении всего), но wars и ears не служат библиотеками, от которых вы зависите.
Комментарии:
1. Тогда какова важность области зависимостей в случае упаковки jar?
2. Если вы хотите зависимость от пути к классу компиляции, используйте
compile
. Если это только для тестов, используйтеtest
, если это только для времени выполнения, используйтеruntime
(тогда вы не можете использовать это в своем коде напрямую).3. Требуется ли зависимость от области системы только во время выполнения? Становится ли его значение пути к классу
<systempath>
определенным даже после развертывания проекта?4. Область
system
редко используется в настоящее время. Я бы этого избегал.5. Я просто хотел знать для теоретических целей