Ich baue ein Update-System, in dem ich in der Lage sein muss, ein referenziertes jar eines laufenden Application jar zur Laufzeit zu ersetzen. Ich habe jedoch Probleme mit der Dateisperrung unter Windows, wenn ich versuche, Dateifunktionen auf dem Jar auszuführen, wie zum Beispiel 'setLastModified'.Ein laufendes jar zur Laufzeit austauschen
Nach einigen googeln ich diesen Schnipsel gefunden ...
Was ich in meiner Forschung gefunden, dass die Standard-Classloader Implementierung nie ein Glas Datei schließt, sobald es geöffnet wurde. Es auch lädt nur Ressourcen aus der JAR-Datei nach Bedarf. Zu jedem Zeitpunkt kann es Klassen in der JAR-Datei geben, die nicht in den Speicher geladen wurden. Offensichtlich, wenn Sie die JAR-Datei aus dem ClassLoader heraus, und es versucht, eine Ressource in der fehlende Datei zu finden, werden Sie eine IOException mindestens erhalten.
Hat jemand irgendwelche Verweise auf Informationen dazu, oder um dieses Problem zu umgehen?
Danke.
Müssen Sie das Rad neu erfinden? OSGi hat bereits eine Hot-Deployment-Funktion. Schauen Sie nach und sehen Sie, ob Sie das stattdessen verwenden könnten. – SteveD
OSGi klingt wie überwältigend für die meisten Anforderungen, werfen Sie einen Blick auf diese Antwort http://StackOverflow.com/A/2463978/320594 –
Nach dem erneuten Lesen scheint es, Sie wollen Ihre Anwendung laufen lassen, aber mit den neuen Gläsern ... so sieht OSGi wirklich wie eine gute Lösung aus :), zum Beispiel ermöglicht Eclipse das (Plugins werden beim Laufen neu geladen) und benutzt dafür OSGi (so lange ich weiß). –