|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
В jigsaw есть requires static Как я понял это значит что во время компиляции зависимый модуль должен присутствовать, но в райнтайме он может и не присуствовать. 1. Как такое может быть? 2. Зачем такое надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 12:30 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
Изначально подумал, что это что-то типа мавеновского provided, который говорит, что какую-то зависимость надо брать с application сервера. Но тут же пишут, что в рантайме классы будут не доступны. Видимо это неверное предположение ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 13:12 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
questionerИзначально подумал, что это что-то типа мавеновского provided, который говорит, что какую-то зависимость надо брать с application сервера. Но тут же пишут, что в рантайме классы будут не доступны. Видимо это неверное предположение Пример: lombok ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 14:51 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
questionerКак я понял это значит что во время компиляции зависимый модуль должен присутствовать, но в райнтайме он может и не присуствовать. 1. Как такое может быть? 2. Зачем такое надо? Покажи место в доке, из которой ты "так понял". ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 17:27 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 14:08 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
vslquestionerИзначально подумал, что это что-то типа мавеновского provided, который говорит, что какую-то зависимость надо брать с application сервера. Но тут же пишут, что в рантайме классы будут не доступны. Видимо это неверное предположение Пример: lombok А это хорошо. Только я понимаю, что например в 8-ке такого нет ибо всё в classpath или я ошибаюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 14:10 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
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.
Как-то вообще не понятно нахрена вообще добавлять зависимость тогда. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 19:32 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
Разжевано же отлично, что опять непонятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 21:22 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
забыл никРазжевано же отлично, что опять непонятно? А что понятно то ? давайте перфразирую то, как я понял прочитанное: Мы пишем модуль my.lib , который Код: java 1.
, но пользователи не хотят использовать, видимо foo.module Мне это уже кажется странным ибо модули это про инкапсуляцию и пользователей модуля my.lib не должны волновать его зависимости. Код: java 1. 2. 3.
Вот это я вообще не понял. У нашего модуля есть какой-то функционал, но пользователи нашего модуля не хотят его использовать. Ну значит не вызывайте функцию. Ну либо вообще не подключайте наш модуль. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 11:43 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
questioner Мне это уже кажется странным ибо модули это про инкапсуляцию и пользователей модуля my.lib не должны волновать его зависимости. Что странного? Условный хибернейт зависит от коммонс-логгинг, коммонс-лэнг, коммонс-коллекшнс и кучи другого шлака, не пистаь же им все самим. Но чтобы скомпилировать проект они нужны. Это называется транзитивные депенденси. У пользователя модуля mylib есть три возможности - 1) полагаться на авторов хибернейта и тянуть все транзитивные зависимости 2) предоставить свои версии библиотек или интерфейсов(Да, как provided в мавене) 3) Либо предоставить только часть либ, если есть уверенность, что они не буду использовать функционал, который зависит от опциональных депенденсей. Код: java 1. 2. 3.
questionerВот это я вообще не понял. У нашего модуля есть какой-то функционал, но пользователи нашего модуля не хотят его использовать. Ну значит не вызывайте функцию. Ну либо вообще не подключайте наш модуль. А как ты узнаешь какую функцию вызывать а какую нет? Optional - просто способ декларативно разделить тразитивные депенденси которые жизнеенно необходимы модулю, и второстепенные, которые необходимы в редких случаях, и которое нужно подключать самостоятельно ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 11:56 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
забыл никquestionerМне это уже кажется странным ибо модули это про инкапсуляцию и пользователей модуля my.lib не должны волновать его зависимости. Что странного? Условный хибернейт зависит от коммонс-логгинг, коммонс-лэнг, коммонс-коллекшнс и кучи другого шлака, не пистаь же им все самим. Но чтобы скомпилировать проект они нужны. Это называется транзитивные депенденси. У пользователя модуля mylib есть три возможности - 1) полагаться на авторов хибернейта и тянуть все транзитивные зависимости 2) предоставить свои версии библиотек или интерфейсов(Да, как provided в мавене) 3) Либо предоставить только часть либ, если есть уверенность, что они не буду использовать функционал, который зависит от опциональных депенденсей. Код: java 1. 2. 3.
questionerВот это я вообще не понял. У нашего модуля есть какой-то функционал, но пользователи нашего модуля не хотят его использовать. Ну значит не вызывайте функцию. Ну либо вообще не подключайте наш модуль. А как ты узнаешь какую функцию вызывать а какую нет? Optional - просто способ декларативно разделить тразитивные депенденси которые жизнеенно необходимы модулю, и второстепенные, которые необходимы в редких случаях, и которое нужно подключать самостоятельно Какая-то путаница пошла. Есть 3 requires(отсортированы по усилению) 1. requires static(зависимость обязательна только на стадии компиляции) 2. requires(зависимость обязательна как на стадии компиляции так и в райнтайме) 3. requires transitive(Если A reqires B, B transitive requres C, то A может свободно пользоваться С как в райнтайме, так и при компиляции) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 13:02 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
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. Ну как бы тогда всё очевидно - непонятно зачем выбран инструмент и его изучение основано на непонятном же блоге некоего перца, который по каждой второй ссылке впаривает свою книжку по данному инструменту. То есть выход там простой - отдать денег пейсателю блога. И выход предлагается по каждой второй ссылке. Так почему ты не отдал денег и не прочитал книжку? И не прочитав, надеешься что-то понять здесь. В общем обычно вменяемые люди находят вменяемые источники информации. Твой блоггер - невменяемый источник. Он тупо хочет денег. Я такие блоги после первых же пары предложений забываю навсегда. Но раз тебе понравилось, ну выход же очевиден - купи книжку, отдай денег, поиграй в игру с этим блоггером по его же правилам и за твои, естественно, деньги. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 13:11 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
забыл ник Условный хибернейт зависит от коммонс-логгинг, коммонс-лэнг, коммонс-коллекшнс и кучи другого шлака, не пистаь же им все самим. Но чтобы скомпилировать проект они нужны. Это называется транзитивные депенденси. У пользователя модуля mylib есть три возможности - 1) полагаться на авторов хибернейта и тянуть все транзитивные зависимости 2) предоставить свои версии библиотек или интерфейсов(Да, как provided в мавене) 3) Либо предоставить только часть либ, если есть уверенность, что они не буду использовать функционал, который зависит от опциональных депенденсей. по 1-ому пункту: В джаве до 9-ки ведь нет возможности не тянуть транзитивные зависимости? ну кроме как exclude? по 2-ому пункту: Не понятно только как хибернейт поймёт брать коммонс логгинг(который его прямая зависимость) или SLF4J, который я подключил? по 3-ему пункту: НЕ понял ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 13:16 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
Ну вот я могу представить, что в модуле А написан код формата: 1. Пытаемся загрузить класс через класслоадер 2. Если загрузился, то через рефлекшн грузим всё что нам надо и используем классы, но это какая-то дикость по-моему 3. Если не загрузился, то скипаем часть логики. Выглядит неправдоподобно ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 16:11 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
1) в либе есть метод toJson(Object:obj) 2) В клиенте просто вызываем toJson и получаем обхект Json. все довольны 3) Приходит баг что в toJson чтото работает не так 4) Разработчики либы хотят продебажить, но логика настолько сложна, что они решили каждый шаг запротоколировать , для этого в toJson добавили код if(config.enabledDebug) someMonitoringLib(toJson) else toJson 5) Им для монитроинга нужна стороння лиюа в редких случаях, а обычному пользователю нет ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 16:17 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
забыл ник1) в либе есть метод toJson(Object:obj) 2) В клиенте просто вызываем toJson и получаем обхект Json. все довольны 3) Приходит баг что в toJson чтото работает не так 4) Разработчики либы хотят продебажить, но логика настолько сложна, что они решили каждый шаг запротоколировать , для этого в toJson добавили код if(config.enabledDebug) someMonitoringLib(toJson) else toJson 5) Им для монитроинга нужна стороння лиюа в редких случаях, а обычному пользователю нет Хорошо, обычному пользователю по сути не нужна зависимость на someMonitoringLib , если enabledDebug выставлен в false и в рантайме проблем не будет. Если вдруг мы тоже хотим оддебажить эту либу, то нам надо будет добавить зависимость явно(requires).Выглядит разумно. То есть мы по сути экономим на размере зависимостей модуля? jar потоньше будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 16:33 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
[quot забыл ник]questionerУсловный хибернейт зависит от коммонс-логгинг, коммонс-лэнг, коммонс-коллекшнс и кучи другого шлака, не пистаь же им все самим. Но чтобы скомпилировать проект они нужны. Это называется транзитивные депенденси. зачем? вы разве собираетесь сами еще и хибернейт компилировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 17:35 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
Можно собирать две сборки. По аналогии с драйверами jdbc. Релизная (.jar). И отладочная (_g.jar). Отладочная соотв флудит с уровнем TRACE детально всё что есть. Релизная вообще не содержит обращений к логгированию. И релизная потоньше будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 17:57 |
|
Зачем нужны optional зависимости?(которые есть в компайл тайме, но их нет в рантайме)
|
|||
---|---|---|---|
#18+
mayton, Это если он драйвер пишет)) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 19:01 |
|
|
start [/forum/search_topic.php?author=preslyel&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
320ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 22ms |
total: | 461ms |
0 / 0 |