Информация об изменениях

Сообщение Re[12]: JNI Attach от 04.11.2024 16:33

Изменено 04.11.2024 16:39 Pavel Dvorkin

Re[12]: JNI Attach
Здравствуйте, ·, Вы писали:

·>Это имеет значение по нескольким причинам. Главное тут, что он, похоже, собирается организовывать интеграцию частей от разных источников/вендоров плагинов. И тут возникает проблема, что все они одновременно должны работать вместе и как-то взаимодействовать.


·>Этим наелись уже давно, во времена application servers и прочего энтерпрайза. Мороки много, хитрые грабли вылазят. А если ещё и выгрузка плагинов/классов...


·>Версия JDK: представь себе какой-то старинный, но очень нужный плагин где-то там через зависимости хочет sun.misc.*, который доступен в JDK 7. И всё работает. А потом выходит новый и ещё более нужный плагин на JDK 21, а там какой-то класс deprecated и removed.


·>Вдобавок, кастомные ClassLoader-ы требуют осторожного обращения и понимания что происходит. Например, один и тот же класс загруженный разными класслоадерами — по сути два разных класса, у которых, например, свои глобальные переменные и хитрые исключения вроде cannot cast my.cool.SomeClass to my.cool.SomeClass.


А вот с этим соглашусь, конечно, без сомнения.
Собственно, я уже собрался спать ложиться, но вспомнил об этом и решил еще один ответ написать. Но теперь не буду, так как ты изложил все, что я собирался написать.

Кстати, и не только экзотика в виде sun.misc. И не только версии JDK. А еще и просто зависимости от прочих артефактов, которые могут быть в основной java программе и других jar различными по версии. Если они там окажутся одновременно в итоге загрузки, то хорошего будет тоже мало.

Впрочем, это к JNI не имеет отношения, к плагинам на C/C++ и к runtime-загрузке jar тоже. Это обычная проблема на java. Если бы он просто добавил все свои jar в java — проект без всякого C/C++, было бы то же самое.

Так что советую ТС проверить

mvn dependency:tree
mvn dependency:analyze-duplicate

и для основной java программы и для всех jar

https://www.baeldung.com/maven-duplicate-dependencies
https://stackoverflow.com/questions/4417820/how-to-list-dependencies-of-a-jar
Re[12]: JNI Attach
Здравствуйте, ·, Вы писали:

·>Это имеет значение по нескольким причинам. Главное тут, что он, похоже, собирается организовывать интеграцию частей от разных источников/вендоров плагинов. И тут возникает проблема, что все они одновременно должны работать вместе и как-то взаимодействовать.


·>Этим наелись уже давно, во времена application servers и прочего энтерпрайза. Мороки много, хитрые грабли вылазят. А если ещё и выгрузка плагинов/классов...


·>Версия JDK: представь себе какой-то старинный, но очень нужный плагин где-то там через зависимости хочет sun.misc.*, который доступен в JDK 7. И всё работает. А потом выходит новый и ещё более нужный плагин на JDK 21, а там какой-то класс deprecated и removed.


·>Вдобавок, кастомные ClassLoader-ы требуют осторожного обращения и понимания что происходит. Например, один и тот же класс загруженный разными класслоадерами — по сути два разных класса, у которых, например, свои глобальные переменные и хитрые исключения вроде cannot cast my.cool.SomeClass to my.cool.SomeClass.


А вот с этим соглашусь, конечно, без сомнения.
Собственно, я уже собрался спать ложиться, но вспомнил об этом и решил еще один ответ написать. Но теперь не буду, так как ты изложил все, что я собирался написать.

Кстати, и не только экзотика в виде sun.misc. И не только версии JDK. А еще и просто зависимости от прочих артефактов, которые могут быть в основной java программе и других jar различными по версии. Если они там окажутся одновременно в итоге загрузки, то хорошего будет тоже мало.

Впрочем, это к JNI не имеет отношения, к плагинам на C/C++ и к runtime-загрузке jar тоже. Это обычная проблема на java. Если бы он просто добавил все свои jar в java — проект без всякого C/C++, было бы то же самое.

Так что советую ТС проверить

mvn dependency:tree
mvn dependency:analyze-duplicate

и для основной java программы и для всех jar

https://www.baeldung.com/maven-duplicate-dependencies
https://stackoverflow.com/questions/4417820/how-to-list-dependencies-of-a-jar

Кстати, вопрос к ТС. А почему нужно загружать все эти jar-плагины таким сложным способом ? Нельзя их просто загрузить в java приложение статически ?