File in einem JAR zur Laufzeit ändern

  • Hiho,

    folgendes Problem: Ich will eine selbstgestrickte Java-App als JAR weitergeben. In dem JAR steckt aber ein File (hibernate.cfg.xml :) ) das Einstellungen enthält, die beim ersten Start der App geändert werden (müssen).

    Daher meine Frage: Ist es möglich (und wenn ja, wie) dass die Java-App zur Laufzeit in ihrem eigenen JAR Files editiert?

  • Bin mit JAR files nicht so firm aber ne möglichkeit wär es temporär zu entpacken und dann wieder mit der veränderten datei zu packen...
    bzw einfach "darüber" zu packen (überschreiben)

    sonst wär ein installer vl angebracht :)

    Thomas

    €:

    laut dem thread: http://stackoverflow.com/questions/7464…with-java/74684
    sollte es damit möglich sein: http://java.sun.com/javase/6/docs/…ge-summary.html
    (bzw... http://lmgtfy.com/?q=modify+jar+file+jit )

    Einmal editiert, zuletzt von anwesender (18. April 2009 um 14:12) aus folgendem Grund: Google search

  • das jar ist zur laufzeit gelockt, daher sind keine schreibende zugriffe möglich.
    (während es läuft)
    mit einem externen programm, nennen wir es mal installer, sollte das reicht leicht möglich sein.


    Trading for a living [equities,futures,forex]

  • Meine überlegung war auch eher sobald es gestartet ist, sich selbst zu entpacken und einen teil ausserhalb auszuführen, dadurch sollte es eventuell möglich sein (enpacken wenn es gelockt ist sollte schon hinhaun?) und sich dann wieder einzupacken...
    aber das wird sowieso viel zu kompliziert so :)

    wenn eine abneigung gegen installer vorliegt gibt es noch immer sachen wie thinstall etc. (programme die genau das tun was darüber steht...)

    Thomas

    Einmal editiert, zuletzt von anwesender (18. April 2009 um 14:33) aus folgendem Grund: etwas vergessen

  • es geht doch eh nur um die config-file, oder?
    reichts nicht, die beim ersten ausführen zu generieren, wenn sie nciht vorhanden ist?

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

  • ja, aber sie "lebt" im jar file.
    auf ein jar file schreibend zugreifen das gerade läuft geht nicht, macht also keinen unterschied.
    sie ausserhalb zu platzieren würde einiges erleichern.
    hibernate mappings/configs kann man auch völlig programmatisch (ohen config-file) setzen.
    wäre auch ne möglichkeit, aber etwas umständlich.


    Trading for a living [equities,futures,forex]

    Einmal editiert, zuletzt von Lord Binary (18. April 2009 um 15:07)

  • ja, aber sie "lebt" im jar file.
    auf ein jar file schreibend zugreifen das gerade läuft geht nicht, macht also keinen unterschied.
    sie ausserhalb zu platzieren würde einiges erleichern.


    war das was ich gemeint habe. ich hab mich nur gefragt, wozu gleich ein installer wenns auch ohne geht. beim ersten start config file ins homeverzeichnis und schluss, kein riesen overhead

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

  • Kommt hald darauf an wer das dann benutzen soll... wenn das John Doe ist kapiert der eventuell nicht was das für ne datei ist, bzw sieht sie gar nicht...
    dadurch kann passieren das er sie 1) löscht oder 2) sie in seinem speicher rumgammelt was hald mit der zeit nicht sehr vorteilhaft ist...

    Darum war der Installer gemeint :)

    aber eventuell sollte der thread-starter mal zwischenmeldung zu unseren lösungen geben :)

    Thomas

  • Eine App die hibernate verwendet, wuerde ich eher im Unternehmensbereich zuordnen. (Wer ist DB-Admin?)

    Eine Applikation sollte fuer alle Zielsysteme eine entsprechende Integrations/Start-Umgebung haben (einfachsten Fall .sh+.bat-->....)

    Wenn nicht kann mans im JAR auch konfigurieren
    http://java.sun.com/j2se/1.3/docs/…in%20Attributes (siehe Class-Path)

  • der einwurf, dass man es auch zur laufzeit ohne cfg.xml-file (über =new Configuration().fooBar) machen kann, stimmt schon, aber ist gerade bei diesem file trotzdem nicht wirklich möglich (selbst wenn ich in der db eine tabelle "settings" o.ä. anlegen würde, ohne die infos zur db-connection die eben gerade in der hibernate.cfg.xml stehen, komm ich ja nicht mal in die db...)

    das config-file außerhalb des jars irgendwohin zu legen dürfte, soweit ich das diversen threads in einschlägigen foren entnommen habe, eher problematisch sein.

    installer, wäre wohl die einzige variante..

    hintergrund: die zugehörige app ist ein therapieplanungssystem für eine kleine praxis (2-5 clients, die db (postgre) kommt entweder auf einen kleinen server oder läuft überhaupt nur auf einem der clients) als user sind ziemliche JohnDoes zu erwarten, und ja, derzeit könnt ich das ganze einstellungszeug eh noch manuell machen - nur ist derzeit ungewiss, ob die app nicht in zukunft in einem größeren userkreis verwendet werden soll - und um dafür flexibel genug zu sein, wäre mir halt von anfang an eine out-of-the-box-variante sehr recht gewesen - aber wie schon mehrfach gesagt, in diesem fall würde ich um einen installer nicht herumkommen.(btw., was gibts denn da empfehlenswertes an installern?) und die restlichen kleinigkeiten (z.b. umschalten zw. "echter" db und testdaten-db (schulungszwecke, o.ä.) kann ich auch über commandline-parameter machen.

    Einmal editiert, zuletzt von Mr.Radar (19. April 2009 um 03:10)

  • doch, grundsätzlich natürlich möglich.
    ich löse dieses problem in etwa so:
    configs/updates/lizenzen/... für meine apps werden von einem/meinen zentralen server geholt/überprüft....
    die url dafür ist fix und kann hardcoded werden.
    a) config vom zentralen/fixen config/update/ server/db whatever holen
    b) danach zur laufzeit anwenden
    c) voila, verbindung zur db möglich

    hat den vorteil, daß configs zentral verwaltet/geändert werden können.
    zahlt beispielsweise ein böser kunde nicht mehr, reicht ein knopfdruck und die applikation steht.

    dieser server sollte verdammt ausfallssicher sein, das ist natürlich ein hoher aufwand.

    lg,lb


    Trading for a living [equities,futures,forex]

    Einmal editiert, zuletzt von Lord Binary (19. April 2009 um 13:07)

  • und von leuten die deine java-apps decompilieren wollen wir nicht reden :)
    (betreffend hardcoded)
    ist auf jeden fall ein aufwand das sicher zu gestalten... aber es ist machbar... apropos, gibts nicht solche lizenz verwaltungs/config verwaltungs "server" schon ausprogrammiert? wär sonst n neues projektchen :)

    nachteil ist hald das jeder der es benutzt internet braucht... was eventuell bei seiner app nicht zwangsläufig der fall ist...

    Thomas

    €:
    gibts eigentlich auch einen gratis java obfuscator? wenn ja... brav verwenden :)

    Einmal editiert, zuletzt von anwesender (19. April 2009 um 15:06) aus folgendem Grund: Frage hinzugefügt

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!