Frage

Hallo Stack -Überlauffreunde. Ich habe ein einfaches Problem, von dem ich befürchte, dass er keine einfache Lösung hat, und ich brauche Ratschläge, wie ich vorgehen soll. Ich entwickle eine Java -Anwendung, die als und ausführbares Glas verpackt ist, aber es erfordert, einige seiner JAR -Dateiinhalte während der Ausführung zu ändern. In dieser Phase habe ich ein Problem getroffen, weil einige Betriebssysteme die darauf verhinderne Datei sperren, die darauf verhindern.

Es ist wichtig, dass der Benutzer eine aktualisierte Version der JAR -Datei sieht, wenn die Anwendung immer noch ziemlich flexibel sein kann, wie dies erreicht werden kann. Eine saubere und effiziente Lösung ist offensichtlich bevorzugt, aber die Portabilität ist die einzige schwierige Anforderung.

Im Folgenden können ich drei Ansätze sehen, die ich sehen kann, um das Problem zu lösen, sie zu kommentieren oder andere vorzuschlagen.

  1. Sagen Sie Java, er soll die JAR -Datei zum Schreiben freischalten (dies scheint nicht möglich, aber es wäre die einfachste Lösung)
  2. Kopieren Sie die ausführbaren Klassendateien in eine Tempory -Datei beim Anwendungsstart, verwenden Sie diese Dateien mit einem Klassenloader und entladen diejenigen aus der anfänglichen JAR Dass das ursprüngliche Glas Nolonger verwendet wird, und schalte es so frei)
  3. Stellen Sie eine zweite ausführbare JAR -Datei im ersten Start ein, um das innere Glas an e temporaryFile zu extrahieren, einen neuen Java -Prozess mit dem kopierten Innenglas aufzurufen und ihm den Standort des äußeren Glass zu übergeben, erster Prozess, der zweite Prozess modifys das äußere Glas modifiert das äußere Glas Nicht inzwischen. (Dies wird funktionieren, aber ich bin mir nicht sicher, ob es eine unabhängige Plattform gibt, die eine Java -App auf einen anderen aufruft)

Ich weiß, dass dies eine seltsame Frage ist, aber jede Hilfe wäre geschätzt.

War es hilfreich?

Lösung

Eine Option:

Lassen Sie das Programm einen modifizierten Schreiben schreiben Kopieren der JAR -Datei.

Geben Sie in die JAR -Datei ein zweites Glas mit einem Dienstprogramm ein, das bei der Ausführung die ursprüngliche JAR -Datei löscht und die geänderte Kopie um die des Originals abgibt.

Wenn Ihr Programm beendet (und Änderungen wurden vorgenommen), extrahieren Sie dieses Dienstprogramm und starten Sie es in seinem eigenen JVM (verwenden Runtime.getRuntime().exec()). Das Dienstprogramm würde darauf warten, dass das Schloss das ursprüngliche, unveränderte Glas abgibt und dann seine Geschäfte und seinen Ausgang erledigt.

Für den Benutzer scheint die JAR -Datei beim Beenden zu aktualisieren (oder nah genug!).

Andere Tipps

Ich denke ehrlich, Ihr Ansatz ist falsch. Dies passt einfach nicht gut zur Standardweise der Bereitstellung von Java. Ihre geänderten Dateien müssen nur irgendwo in einer DB- oder XML -Datei bestehen - das ist der einzig vernünftige Ansatz.

Alles ist nur "kämpft gegen den Wind" - Sie könnten mit einigen Kämpfen es zum Laufen bringen, aber es wird Sie oder einen Kunden irgendwann beißen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top