Загрузка файлов JAR во время выполнения в Java - PullRequest
8 голосов
/ 18 ноября 2009

Мне интересно, возможно ли при запуске рабочего стола Java иметь какой-то URL-адрес, посмотреть, нужно ли ему обновить, и, если это так, загрузить необходимые файлы JAR и добавить их в classpath для работающей программы ,

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

Ответы [ 5 ]

11 голосов
/ 18 ноября 2009
3 голосов
/ 18 ноября 2009

Это должно быть возможно. URLClassLoader - это место для начала.

1 голос
/ 19 ноября 2009

Java Web Start - хороший выбор, но имеет некоторые особенности. В частности:

  • Код, который обновляется, должен быть загружен до запуска программы. Более современный подход будет загружать обновления и применять их при следующем запуске.
  • По умолчанию внутри песочницы. Если вам нужно выйти за пределы этого, вы должны подписать свой код, что довольно громоздко, пока вы не автоматизируете процесс развертывания (или не используете Netbeans, что немало помогает).
  • Проблемы не легко отладить - единственный инструмент включает полную трассировку в консоли Java.
  • Кэширование jar-файлов в клиенте подвержено ошибкам. При обновлении убедитесь, что URL-адрес уникален для каждого компонента развертывания, чтобы кэш не использовался.

Но КОГДА работает, работает довольно хорошо. Насколько мне известно, это самый простой способ иметь централизованную версию, легко обновляемую для данного Java-приложения.

-
РЕДАКТИРОВАТЬ: Похоже, что в последней версии Java 6. функциональность «запуска программы и прозрачной загрузки обновлений, если доступно» присутствует. Я еще не пробовал, но скоро.

1 голос
/ 19 ноября 2009

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

Если у вас есть динамическое приложение, которое должно динамически обнаруживать и загружать классы во время выполнения, вы можете посмотреть Динамическая загрузка кода с использованием RMI .

1 голос
/ 18 ноября 2009

Возможно, но подвержено ошибкам.

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

Вы можете проверить этот вопрос для более подробной информации по этой теме.

...