Помещает внешние банки в каталог JAVA_HOME/lib/ext плохая вещь?

У нас есть приложение, которое работает в среде JRE. Приложение использует некоторые внешние банки, и мы помещали их в папку JAVA_HOME/lib/ext. Это работало на нас в течение многих лет, но недавно новый программист присоединился к нашей команде и кажется решительным, который это - некоторые как плохая вещь сделать. Я не могу понять, почему и я пытаюсь провести некоторое исследование, прежде чем я вырою далее с этим разработчиком. Есть ли что-то, что я пропускаю здесь?

15
задан Elliott 15 January 2010 в 01:58
поделиться

2 ответа

Да - это плохое. Подумайте об этом: приложение зависит от JRE и некоторых дополнительных банок. Что если вы обновите JRE? Тогда вы должны помнить, чтобы скопировать файлы в новый JRE. Что, если вам нужно настроить приложение в новой системе? Вы должны скопировать там приложение, а затем также не забывайте копировать внешние банки в JRE в этой системе.

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

24
ответ дан 1 December 2019 в 01:30
поделиться

Это слишком специфично. Вы можете получить степень магистра в C.S. и пройти курсы мобильного программирования и сделать свой проект или диссертацию по мобильному программированию и даже работать с советником и сделать некоторые исследования на уровне магистров.

-121--1882305-

Ключевое слово Java final эквивалентно ключевым словам C # sealed , readonly и sealed .

Два из этих трех несколько отличаются в Java и C #:

В Java методы являются виртуальными по умолчанию, поэтому любой метод может быть объявлен окончательным , чтобы предотвратить его переопределение. В C # методы не являются виртуальными по умолчанию, поэтому единственные переопределенные методы могут быть объявлены запечатанными (Чтобы предотвратить их дальнейшее переопределение)

В Java любая переменная или поле могут быть объявлены окончательными , чтобы предотвратить их изменение после инициализации (И, для полей, вне конструктора). В C # поля могут быть объявлены только для чтения для того же эффекта, но локальные переменные не могут. Обратите внимание, что Java не имеет эквивалента ключевого слова C # const . ( const в C # оцениваются во время компиляции, и значения жестко кодируются вместо ссылки)

Для классов запечатанные классы C # и конечные классы Java являются абсолютно одинаковыми (AFAIK).

-121--2666506-

Помимо ответа weiji (упаковка и модернизации до новых версий JVM), существуют и другие риски.

Если вы используете диспетчер безопасности в любом из ваших приложений, библиотеки в ext часто имеют намного больше возможностей по умолчанию - они рассматриваются как системные библиотеки. Вы должны быть уверены, что вы можете доверять, в смысле применения правил безопасности, этим классам. Задумывались ли авторы о том, что они правильно разоблачили? Если эти классы не используют управление доступом для изменения контекста безопасности, то вам не нужно беспокоиться об этом, но знаете ли вы, если они это делают или нет (например, метод, предоставляющий доступ к файлу и использующий SunController, гарантирует ли он, что вызывающая сторона имеет правильные разрешения на доступ к файлу?)

Могут ли все ваши приложения использовать одну и ту же версию библиотеки? Что происходит, когда требуется обновить эту библиотеку (а не только JVM)? Вы нарушите какие-либо приложения? Вам нужно будет все проверить. Библиотеки в ext загружаются загрузчиком класса расширения, который из-за делегирования вышестоящих элементов имеет более высокий приоритет, чем обычный загрузчик (т.е. CLASSPATH), поэтому они гарантированно используются приложением, и для отдельного приложения нет пути переопределять библиотеку в ext с другой версией.

Если вы хотите совместно использовать библиотеки в своих приложениях, почему бы вместо этого не предоставить отдельную папку с общими библиотеками, на которые можно индивидуально настроить приложения (CLASSPATH).Если у вас возникли проблемы с одним приложением и библиотекой, вы можете переключиться на другую версию библиотек или просто на другую, поставив ее раньше в CLASSPATH (если это работает, вы также должны проверить это, так как могут быть другие проблемы с зависимостями). Это позволит вам иметь больше индивидуального управления для каждого приложения. Однако объединение всех необходимых библиотек с приложением является самым безопасным, так как вы можете повторно протестировать и развернуть модернизации библиотек для отдельных приложений.

10
ответ дан 1 December 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: