powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
20 сообщений из 20, страница 1 из 1
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39813471
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В jigsaw есть requires static

Как я понял это значит что во время компиляции зависимый модуль должен присутствовать, но в райнтайме он может и не присуствовать.

1. Как такое может быть?
2. Зачем такое надо?
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39813494
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изначально подумал, что это что-то типа мавеновского provided, который говорит, что какую-то зависимость надо брать с application сервера. Но тут же пишут, что в рантайме классы будут не доступны. Видимо это неверное предположение
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39813599
vsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vsl
Гость
questionerИзначально подумал, что это что-то типа мавеновского provided, который говорит, что какую-то зависимость надо брать с application сервера. Но тут же пишут, что в рантайме классы будут не доступны. Видимо это неверное предположение
Пример: lombok
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39813710
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerКак я понял это значит что во время компиляции зависимый модуль должен присутствовать, но в райнтайме он может и не присуствовать.

1. Как такое может быть?
2. Зачем такое надо?
Покажи место в доке, из которой ты "так понял".
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814029
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555questionerКак я понял это значит что во время компиляции зависимый модуль должен присутствовать, но в райнтайме он может и не присуствовать.

1. Как такое может быть?
2. Зачем такое надо?
Покажи место в доке, из которой ты "так понял".

В доке не покажу, но покажу вот что:

https://blog.codefx.org/java/module-system-optional-dependencies/
When a module needs to be compiled against types from another module but does not want to depend on it at run time, it can use a requires static clause.
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814031
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vslquestionerИзначально подумал, что это что-то типа мавеновского provided, который говорит, что какую-то зависимость надо брать с application сервера. Но тут же пишут, что в рантайме классы будут не доступны. Видимо это неверное предположение
Пример: lombok

А это хорошо.

Только я понимаю, что например в 8-ке такого нет ибо всё в classpath или я ошибаюсь?
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814257
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
https://www.baeldung.com/java-9-modularity Sometimes we write code that references another module, but that users of our library will never want to use.

For instance, we might write a utility function that pretty-prints our internal state when another logging module is present. But, not every consumer of our library will want this functionality, and they don’t want to include an extra logging library.

In these cases, we want to use an optional dependency. By using the requires static directive, we create a compile-time-only dependency:

Код: java
1.
2.
3.
module my.module {
    requires static module.name;
}



Как-то вообще не понятно нахрена вообще добавлять зависимость тогда.
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814286
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разжевано же отлично, что опять непонятно?
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814516
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никРазжевано же отлично, что опять непонятно?

А что понятно то ? давайте перфразирую то, как я понял прочитанное:

Мы пишем модуль my.lib , который
Код: java
1.
requires foo.module

, но пользователи не хотят использовать, видимо foo.module

Мне это уже кажется странным ибо модули это про инкапсуляцию и пользователей модуля my.lib не должны волновать его зависимости.

Код: java
1.
2.
3.
For instance, we might write a utility function that pretty-prints our internal state when another logging module is present. But, not every consumer of our library will want this functionality, and they don’t want to include an extra logging library.

In these cases, we want to use an optional dependency. By using the requires static directive, we create a compile-time-only dependency:



Вот это я вообще не понял. У нашего модуля есть какой-то функционал, но пользователи нашего модуля не хотят его использовать. Ну значит не вызывайте функцию. Ну либо вообще не подключайте наш модуль.
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814522
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
Мне это уже кажется странным ибо модули это про инкапсуляцию и пользователей модуля my.lib не должны волновать его зависимости.

Что странного? Условный хибернейт зависит от коммонс-логгинг, коммонс-лэнг, коммонс-коллекшнс и кучи другого шлака, не пистаь же им все самим. Но чтобы скомпилировать проект они нужны. Это называется транзитивные депенденси. У пользователя модуля mylib есть три возможности - 1) полагаться на авторов хибернейта и тянуть все транзитивные зависимости 2) предоставить свои версии библиотек или интерфейсов(Да, как provided в мавене) 3) Либо предоставить только часть либ, если есть уверенность, что они не буду использовать функционал, который зависит от опциональных депенденсей.

Код: java
1.
2.
3.
For instance, we might write a utility function that pretty-prints our internal state when another logging module is present. But, not every consumer of our library will want this functionality, and they don’t want to include an extra logging library.

In these cases, we want to use an optional dependency. By using the requires static directive, we create a compile-time-only dependency:


questionerВот это я вообще не понял. У нашего модуля есть какой-то функционал, но пользователи нашего модуля не хотят его использовать. Ну значит не вызывайте функцию. Ну либо вообще не подключайте наш модуль.
А как ты узнаешь какую функцию вызывать а какую нет? Optional - просто способ декларативно разделить тразитивные депенденси которые жизнеенно необходимы модулю, и второстепенные, которые необходимы в редких случаях, и которое нужно подключать самостоятельно
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814558
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никquestionerМне это уже кажется странным ибо модули это про инкапсуляцию и пользователей модуля my.lib не должны волновать его зависимости.

Что странного? Условный хибернейт зависит от коммонс-логгинг, коммонс-лэнг, коммонс-коллекшнс и кучи другого шлака, не пистаь же им все самим. Но чтобы скомпилировать проект они нужны. Это называется транзитивные депенденси. У пользователя модуля mylib есть три возможности - 1) полагаться на авторов хибернейта и тянуть все транзитивные зависимости 2) предоставить свои версии библиотек или интерфейсов(Да, как provided в мавене) 3) Либо предоставить только часть либ, если есть уверенность, что они не буду использовать функционал, который зависит от опциональных депенденсей.

Код: java
1.
2.
3.
For instance, we might write a utility function that pretty-prints our internal state when another logging module is present. But, not every consumer of our library will want this functionality, and they don’t want to include an extra logging library.

In these cases, we want to use an optional dependency. By using the requires static directive, we create a compile-time-only dependency:


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

Какая-то путаница пошла. Есть 3 requires(отсортированы по усилению)
1. requires static(зависимость обязательна только на стадии компиляции)
2. requires(зависимость обязательна как на стадии компиляции так и в райнтайме)
3. requires transitive(Если A reqires B, B transitive requres C, то A может свободно пользоваться С как в райнтайме, так и при компиляции)
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814566
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerВ доке не покажу, но покажу вот что:

https://blog.codefx.org/java/module-system-optional-dependencies/
When a module needs to be compiled against types from another module but does not want to depend on it at run time, it can use a requires static clause.
Ну как бы тогда всё очевидно - непонятно зачем выбран инструмент и его изучение основано на непонятном же блоге некоего перца, который по каждой второй ссылке впаривает свою книжку по данному инструменту. То есть выход там простой - отдать денег пейсателю блога. И выход предлагается по каждой второй ссылке. Так почему ты не отдал денег и не прочитал книжку? И не прочитав, надеешься что-то понять здесь.

В общем обычно вменяемые люди находят вменяемые источники информации. Твой блоггер - невменяемый источник. Он тупо хочет денег. Я такие блоги после первых же пары предложений забываю навсегда. Но раз тебе понравилось, ну выход же очевиден - купи книжку, отдай денег, поиграй в игру с этим блоггером по его же правилам и за твои, естественно, деньги.
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814568
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник Условный хибернейт зависит от коммонс-логгинг, коммонс-лэнг, коммонс-коллекшнс и кучи другого шлака, не пистаь же им все самим. Но чтобы скомпилировать проект они нужны. Это называется транзитивные депенденси. У пользователя модуля mylib есть три возможности -
1) полагаться на авторов хибернейта и тянуть все транзитивные зависимости
2) предоставить свои версии библиотек или интерфейсов(Да, как provided в мавене)
3) Либо предоставить только часть либ, если есть уверенность, что они не буду использовать функционал, который зависит от опциональных депенденсей.

по 1-ому пункту: В джаве до 9-ки ведь нет возможности не тянуть транзитивные зависимости? ну кроме как exclude?

по 2-ому пункту: Не понятно только как хибернейт поймёт брать коммонс логгинг(который его прямая зависимость) или SLF4J, который я подключил?

по 3-ему пункту: НЕ понял
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814715
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот я могу представить, что в модуле А написан код формата:
1. Пытаемся загрузить класс через класслоадер
2. Если загрузился, то через рефлекшн грузим всё что нам надо и используем классы, но это какая-то дикость по-моему
3. Если не загрузился, то скипаем часть логики.


Выглядит неправдоподобно
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814722
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) в либе есть метод toJson(Object:obj)
2) В клиенте просто вызываем toJson и получаем обхект Json. все довольны
3) Приходит баг что в toJson чтото работает не так
4) Разработчики либы хотят продебажить, но логика настолько сложна, что они решили каждый шаг запротоколировать , для этого в toJson добавили код if(config.enabledDebug) someMonitoringLib(toJson) else toJson
5) Им для монитроинга нужна стороння лиюа в редких случаях, а обычному пользователю нет
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814726
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник1) в либе есть метод toJson(Object:obj)
2) В клиенте просто вызываем toJson и получаем обхект Json. все довольны
3) Приходит баг что в toJson чтото работает не так
4) Разработчики либы хотят продебажить, но логика настолько сложна, что они решили каждый шаг запротоколировать , для этого в toJson добавили код if(config.enabledDebug) someMonitoringLib(toJson) else toJson
5) Им для монитроинга нужна стороння лиюа в редких случаях, а обычному пользователю нет

Хорошо, обычному пользователю по сути не нужна зависимость на someMonitoringLib , если enabledDebug выставлен в false и в рантайме проблем не будет. Если вдруг мы тоже хотим оддебажить эту либу, то нам надо будет добавить зависимость явно(requires).Выглядит разумно.

То есть мы по сути экономим на размере зависимостей модуля? jar потоньше будет?
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814754
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot забыл ник]questionerУсловный хибернейт зависит от коммонс-логгинг, коммонс-лэнг, коммонс-коллекшнс и кучи другого шлака, не пистаь же им все самим. Но чтобы скомпилировать проект они нужны. Это называется транзитивные депенденси.
зачем? вы разве собираетесь сами еще и хибернейт компилировать?
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814760
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно собирать две сборки. По аналогии с драйверами jdbc. Релизная (.jar). И отладочная (_g.jar). Отладочная соотв
флудит с уровнем TRACE детально всё что есть. Релизная вообще не содержит обращений к логгированию. И релизная
потоньше будет.
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814774
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Это если он драйвер пишет))
...
Рейтинг: 0 / 0
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
    #39814780
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что он пишет в самом деле?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]