Herunterladen von JAR-Dateien zur Laufzeit in Java

8

Ich frage mich, ob es möglich ist, eine Java-Desktop-Anwendung beim Start auf eine URL zu schauen, um zu sehen, ob sie eine Aktualisierung benötigt, und wenn nötig JAR-Dateien herunterzuladen und sie dem Classpath für das laufende Programm hinzuzufügen .

Wenn die alten Gläser da sind, sollten sie noch nicht in den Klassenlader geladen worden sein, an dieser Stelle sollten sie? Ist es möglich, sie auszutauschen, bevor sie geladen werden, ohne die Anwendung neu zu starten?

    
broschb 18.11.2009, 20:02
quelle

5 Antworten

3

Es sollte möglich sein. Der URLClassLoader ist ein Ort zum Starten.

    
TofuBeer 18.11.2009 20:12
quelle
1

Es ist möglich, aber anfällig für Fehler.

Ein etwas saubererer Ansatz besteht darin, eine "Launcher" -Anwendung zu haben, die nicht auf any der aktualisierbaren JARs angewiesen ist, die obigen Schritte auszuführen und dann die eigentliche App zu starten.

Weitere Informationen hierzu finden Sie diese Frage Thema.

    
ChssPly76 18.11.2009 20:10
quelle
1

Java Web Start ist wahrscheinlich die beste Wahl. Die erforderlichen JAR-Dateien sollten im Deskriptor angegeben werden, damit Sie die Versionskontrolle verwalten können.

Wenn Sie eine dynamische Anwendung haben, die dynamisch Klassen zur Laufzeit ermitteln und herunterladen muss, können Sie sich Herunterladen von dynamischem Code mit RMI .

    
crowne 18.11.2009 21:33
quelle
1

Java Web Start ist eine gute Wahl, hat aber einige Macken. Bemerkenswert:

  • Aktualisierter Code muss vor dem Programmstart heruntergeladen werden. Ein modernerer Ansatz würde Updates herunterladen und sie beim nächsten Start anwenden.
  • Der Standardwert ist in einer Sandbox. Wenn Sie darüber hinausgehen müssen, müssen Sie Ihren Code unterschreiben, was ziemlich mühsam ist, bis Sie den Bereitstellungsprozess automatisieren (oder Netbeans verwenden, was ziemlich hilfreich ist).
  • Probleme sind nicht einfach zu debuggen - nur das Tool ermöglicht vollständige Trace in der Java Console.
  • Das Caching von Gläsern im Client ist fehleranfällig. Stellen Sie beim Aktualisieren sicher, dass die URL für jede Bereitstellungskomponente eindeutig ist, sodass der Cache nicht verwendet wird.

Aber WENN es funktioniert, funktioniert es ziemlich gut. Es ist meines Wissens der einfachste Weg, um eine zentralisierte Version einer bestimmten Java-Anwendung leicht zu aktualisieren.

-
EDIT: Es scheint, dass die Funktion "Programm starten und Updates transparent, wenn verfügbar" im aktuellen Java 6 vorhanden ist. Ich habe es noch nicht versucht, aber bald.

    
quelle

Tags und Links