Область зависимости Maven против транзитивной зависимости

#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. Я просто хотел знать для теоретических целей