Jar-зависимости компилируют время и время выполнения - PullRequest
0 голосов
/ 30 ноября 2018

Если по умолчанию, когда я создаю jar-приложение, зависимости не включаются, означает ли это, что пользователь должен загрузить все зависимости моего приложения, чтобы использовать его?

Почему включение зависимостей в jarне по умолчанию?

Как можно ожидать, что пользователи будут иметь / загружать все зависимости с нужной версией?

1 Ответ

0 голосов
/ 30 ноября 2018

С https://imagej.net/Uber-JAR:

Преимущества :

Один файл JAR проще в развертывании.Нет вероятности несовпадения версий нескольких файлов JAR.Проще создать Java-путь к классам, поскольку необходимо включить только один JAR-файл.

Недостатки :

Каждый раз, когда вам необходимо обновить версию программного обеспечения, вы должны повторно развернуть весь UAR-JAR (например, ImageJ составляет ~ 68 МБ по состоянию на май 2015 года).Если вы связываете отдельные компоненты JAR, вам нужно обновить только те, которые изменились.Эта проблема имеет особое значение для приложений Java, развернутых через Java Web Start, поскольку она автоматически загружает последнюю доступную версию каждой зависимости JAR;в этом случае время запуска вашего приложения сократится, если вы будете использовать uber-JAR.

Вы не можете выбрать только те JAR-файлы, которые содержат необходимую вам функциональность, поэтому площадь вашего приложения может увеличиться.

Если нижестоящий код опирается на любую из тех же зависимостей, которые встроены в не затененный uber-jar, вы можете столкнуться с проблемой (например, NoSuchMethodError для не заштрихованных uber-JAR) с несколькими копиями этих зависимостей на вашем пути к классам, особенно есливам нужно использовать версию этой зависимости, отличную от той, которая поставляется вместе с uber-JAR.

Как видите, важно понимать, как использование uber-JAR повлияет на ваше приложение.В частности, Java-приложения, вероятно, будут лучше обслуживаться с использованием отдельных JAR-компонентов, в идеале управляемых с помощью платформы управления зависимостями, такой как Maven или Ivy.Но для приложений, не относящихся к Java, uber-JAR может быть достаточно для ваших нужд.

Это в основном зависит от варианта использования.Если jar будет использоваться при разработке других приложений и его зависимости могут время от времени обновляться, имеет смысл использовать обычный jar, но если jar нужно запускать / развертывать, может быть лучше использовать uber /толстый кувшин.

...