2009-11-18 2 views
8

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

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

ответ

1

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

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

Для получения более подробной информации по этой теме вы можете обратиться к this question.

11
+0

Это то, что я обычно делаю. У меня есть приложение, которое обычно будет jnlp, но в этом конкретном сценарии я собираюсь запустить это приложение из уже запущенного vm и запустить его в том же vm. Эта часть работает. Проблема заключается в том, что приложение, которое запускает приложение, которое обычно будет jnlp, не так просто обновить, и для запуска другого приложения ему потребуются некоторые зависимые баночки в пути к классам. Jnlp решит все это, но единственным требованием vm является ограничение. – broschb

1

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

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

1

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

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

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

-
EDIT: Похоже, что функциональность «запуска программы и прозрачная загрузка обновлений» доступна в последней версии Java 6. Я еще не пробовал, но скоро.