2009-08-03 7 views
57

Ich möchte eine Datei in meinem Glas ändern. Ist es möglich, dies zu tun, ohne aus meiner Anwendung heraus zu extrahieren und zu reaktivieren?Ändern einer Datei in einem Glas

Datei, die ich ändern möchte, sind Konfigurationsdateien, meist XML-basiert.

Der Grund, warum ich nicht daran interessiert bin zu stören ist, dass die Anwendung mit launch4j verpackt ist, wenn ich es entsperren, kann ich die .exe-Datei nicht erneut erstellen.

+0

Warum möchten Sie das tun? –

+0

Ich möchte die Zusatzdateien innerhalb der Anwendung behalten, ohne temporäre Dateien im Dateisystem zu erstellen. –

+0

Probieren Sie diese Lösung http://stackoverflow.com/a/4837522/1853864 Ich habe verwendet und meine Probleme wurden gelöst. –

Antwort

61

können Sie verwenden, um die u Option für jar

aus der Java-Tutorials:

jar uf jar-file input-file(s) 

„Alle Dateien bereits im Archiv den gleichen Pfad als Datei überschrieben werden wird, mit aufgenommen.“

Siehe Updating a JAR File.

Viel besser als das ganze Glas wieder zu machen. Das aus dem Programm heraus zu hören, klingt ebenfalls möglich. Versuchen Sie Running Command Line in Java

+0

Super! Aber sie haben die Pfadnamen lustig hinzugefügt. IE Bitbucket.foo.bar anstelle der com.etc.etc die bestehende hat – StarWind0

0

Solange diese Datei nicht .class ist, d. H. Ressourcendatei oder Manifestdatei, können Sie.

+0

und wie, ohne zu extrahieren und zu re-jarring? –

9

Java-JAR-Dateien haben dasselbe Format wie ZIP-Dateien - wenn Sie also über ein Zip-Datei-Dienstprogramm verfügen, mit dem Sie ein Archiv ändern können, haben Sie Ihren Fuß in der Tür. Zweites Problem ist, wenn Sie eine Klasse oder etwas neu kompilieren wollen, müssen Sie wahrscheinlich nur das Glas neu bauen; aber eine Textdatei oder etwas (zum Beispiel xml) sollte leicht genug modifiziert werden.

1

Um zu erweitern, was dfa sagte, liegt der Grund daran, dass die JAR-Datei wie eine Zip-Datei eingerichtet ist. Wenn Sie die Datei ändern möchten, müssen Sie alle Einträge auslesen, den zu ändernden ändern und die Einträge dann wieder in die JAR-Datei schreiben. Ich musste das vorher tun, und das war der einzige Weg, wie ich es finden konnte.

EDIT

Beachten Sie, dass dies die internen Java-JAR-Datei-Editoren verwendet, die Ströme Datei sind. Ich bin mir sicher, dass es einen Weg gibt, es zu tun, Sie könnten das gesamte jar in den Speicher schreiben, alles modifizieren und dann wieder in einen Dateistrom schreiben. Das ist, glaube ich, dass Dienstprogramme wie 7-Zip und andere tun, da ich glaube, dass die ToC eines Zip-Headers beim Schreiben definiert werden muss. Ich könnte jedoch falsch liegen.

2

Dies kann mehr Arbeit, als Sie mit in kurzer Zeit zu bewältigen suchen, aber ich vermute, auf lange Sicht wäre es sehr vorteilhaft sein, in die Du mit Ant aussehen (oder Maven oder Bazel selbst) statt manuell das Glas zu bauen. Auf diese Weise können Sie einfach auf die Ameisen-Datei klicken (wenn Sie Eclipse verwenden) und das Glas neu erstellen.

Alternativ können Sie diese Konfigurationsdateien im jar gar nicht haben - wenn Sie diese Dateien regelmäßig ersetzen müssen oder wenn sie an mehrere Parteien verteilt werden sollen, sollte die Konfigurationsdatei verwendet werden nicht Teil des Glases überhaupt sein.

+2

Einverstanden. Möglicherweise möchten Sie jedoch eine "Standard" -Konfigurationsdatei in das JAR einfügen. Wenn also etwas mit dem externen passiert (beschädigt, gelöscht usw.), können Sie auf eine Standardkonfiguration zurückgreifen. –

+0

Wahr - obwohl ich nicht weiß, wie viele Anwendungen ohne ihre Konfigurationsdateien weiter funktionieren würden ... – dimo414

7

Wie viele bereits gesagt haben, können Sie eine Datei in einer JAR-Datei nicht ändern, ohne die JAR-Datei neu zu referenzieren. Es ist noch schlimmer mit Launch4J, müssen Sie die EXE neu erstellen, wenn Sie die JAR ändern. Also geh nicht auf diese Route.

Es ist generell eine schlechte Idee, Konfigurationsdateien in das JAR zu schreiben. Hier ist mein Vorschlag. Suchen Sie Ihre Konfigurationsdatei an bestimmten Orten (wie Home-Verzeichnis, \ Programme \ etc). Wenn Sie eine Konfigurationsdatei finden, verwenden Sie sie. Andernfalls verwenden Sie den im JAR als Fallback. Wenn Sie dies tun, müssen Sie nur die Konfigurationsdatei in den vorgegebenen Speicherort schreiben und das Programm wird es abholen.

Ein weiterer Vorteil dieses Ansatzes besteht darin, dass die geänderte Konfigurationsdatei nicht überschrieben wird, wenn Sie Ihre Software aktualisieren.

1

Ja, Sie können, SQLite verwenden, können Sie aus lesen oder aus der JAR-Datei, in eine Datenbank schreiben, so dass Sie nicht extrahieren müssen und dann wieder jar es folgen meinem Beitrag http://shoaibinamdar.in/blog/?p=313

die Verwendung von Syntax "jdbc: sqlite :: resource:" Sie könnten innerhalb der JAR-Datei

+1

Hallo, willkommen zu stackoverflow. Ich habe die Abkürzungen von deinem Beitrag entfernt. Im Allgemeinen ist Kurzschrift für Textnachrichtenstil hier nicht geeignet. Ich denke, diese Antwort wäre eine gute Antwort auf die Frage, ob Sie einige Details aus Ihrem Blog in die Antwort selbst eingefügt haben, so dass jemand, der Ihre Antwort liest, etwas lernt, auch wenn er den Blog nicht liest oder verschoben wird zu einem späteren Zeitpunkt an eine andere URL. – Flexo

1

lesen und in eine Datenbank schreiben. Überprüfen Sie TrueZip.

Es macht genau das, was Sie wollen (um Dateien in einer Jar-Datei inline zu bearbeiten), über eine virtuelle Dateisystem-API. Es unterstützt auch verschachtelte Archive (jar in einem jar).

1

extrahieren Sie JAR-Datei für ex. mit winrar und verwenden CAVAJ:

Cavaj Java Decompiler ist ein grafisches Freeware-Dienstprogramm, das Java-Quellcode aus CLASS-Dateien rekonstruiert.

hier ist Video-Tutorial, wenn Sie brauchen: https://www.youtube.com/watch?v=ByLUeem7680

+0

gut, "Use CAVAJ" Software ist die Antwort hier. Der Link ist nur eine Ergänzung, wenn zusätzliche Erläuterungen erforderlich sind. – Tomasz

1

wenn diese Hilfe nicht sicher, aber man kann ohne Extraktion bearbeiten: die

  1. Öffnen Sie die JAR-Datei von vi-Editor
  2. auswählen Datei, die Sie aus der Liste bearbeiten möchten
  3. Drücken Sie die Eingabetaste, um die Datei zu öffnen, die Wechsler zu tun und speichern Sie sie ziemlich einfach

überprüfen Sie die Blog-Post für weitere Details http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html

7

Sie Vim verwenden können:

vim my.jar

Vim ist in der Lage komprimierte Textdateien zu bearbeiten, da Sie unzip in Ihrer Umgebung haben.

+2

Das ist großartig. Navigieren Sie zu der gesuchten Datei und drücken Sie die Eingabetaste. Bearbeiten Sie die Datei und geben Sie Folgendes ein: wq zum Speichern! –

+0

Es gibt mir unformatierte Datei –

0

Der einfachste Weg, die ich gefunden habe dies in Windows zu tun ist, mit WinRAR:

  1. der rechten Maustaste auf die Datei und wählen Sie „Öffnen mit WinRAR“ aus dem Kontextmenü.
  2. Navigieren Sie zu der zu bearbeitenden Datei und doppelklicken Sie darauf, um sie im Standardeditor zu öffnen.
  3. Speichern und beenden Sie den Editor, nachdem Sie die Änderungen vorgenommen haben.
  4. Es erscheint ein Dialog, in dem Sie gefragt werden, ob Sie die Datei im Archiv aktualisieren möchten - wählen Sie "Ja" und das JAR wird aktualisiert.