Je souhaite modifier un fichier dans mon jar. Est-il possible de faire cela sans extraire et réarranger, depuis mon application?
Les fichiers que je souhaite modifier sont des fichiers de configuration, principalement basés sur XML.
La raison pour laquelle je suis intéressé à ne pas contrarier est que l'application est enveloppée avec launch4j si je la désengage, je ne peux pas créer à nouveau le fichier .exe.
Réponses:
Vous pouvez utiliser l'
u
option pourjar
À partir des didacticiels Java:
"Tous les fichiers déjà dans l'archive ayant le même chemin qu'un fichier ajouté seront écrasés."
Voir Mise à jour d'un fichier JAR .
Bien mieux que de refaire le pot entier. L'appeler depuis votre programme semble également possible. Essayez d' exécuter la ligne de commande en Java
la source
Vous pouvez utiliser Vim:
vim my.jar
Vim est capable d'éditer des fichiers texte compressés, étant donné que vous avez
unzip
dans votre environnement.la source
zip
dans votre environnement, de pouvoir enregistrer les modifications. Merci d'avoir répondu!Les fichiers jar Java sont au même format que les fichiers zip - donc si vous avez un utilitaire de fichier zip qui vous permettrait de modifier une archive, vous avez le pied dans la porte. Le deuxième problème est que si vous voulez recompiler une classe ou quelque chose du genre, vous n'aurez probablement qu'à reconstruire le fichier jar; mais un fichier texte ou quelque chose (xml, par exemple) devrait être assez facilement modifié.
la source
Comme beaucoup l'ont dit, vous ne pouvez pas modifier un fichier dans un JAR sans recanalyser le JAR. C'est encore pire avec Launch4J, vous devez reconstruire l'EXE une fois que vous avez changé le JAR. Alors ne suivez pas cette voie.
C'est généralement une mauvaise idée de mettre les fichiers de configuration dans le JAR. Voici ma suggestion. Recherchez votre fichier de configuration dans des emplacements prédéterminés (comme le répertoire personnel, \ Program Files \ etc.). Si vous trouvez un fichier de configuration, utilisez-le. Sinon, utilisez celui du JAR comme solution de secours. Si vous faites cela, il vous suffit d'écrire le fichier de configuration à l'emplacement prédéterminé et le programme le récupérera.
Un autre avantage de cette approche est que le fichier de configuration modifié n'est pas écrasé si vous mettez à niveau votre logiciel.
la source
Je ne sais pas si cela aide, mais vous pouvez modifier sans extraire:
Consultez l'article du blog pour plus de détails http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html
la source
Cela peut être plus de travail que ce que vous cherchez à faire à court terme, mais je suppose qu'à long terme, il serait très avantageux pour vous d'envisager d'utiliser Ant (ou Maven , ou même Bazel ) au lieu de construire des pots manuellement . De cette façon, vous pouvez simplement cliquer sur le fichier ant (si vous utilisez Eclipse) et reconstruire le bocal.
Alternativement, vous voudrez peut-être ne pas avoir du tout ces fichiers de configuration dans le fichier jar - si vous prévoyez de devoir remplacer ces fichiers régulièrement, ou s'il est censé être distribué à plusieurs parties, le fichier de configuration ne devrait pas faire partie de le pot du tout.
la source
Pour développer ce que dit dfa, la raison est que le fichier jar est configuré comme un fichier zip. Si vous souhaitez modifier le fichier, vous devez lire toutes les entrées, modifier celle que vous souhaitez modifier, puis réécrire les entrées dans le fichier jar. J'ai dû le faire auparavant, et c'était la seule façon que je pouvais trouver pour le faire.
ÉDITER
Notez que cela utilise les éditeurs de fichiers jar internes à Java, qui sont des flux de fichiers. Je suis sûr qu'il existe un moyen de le faire, vous pouvez lire l'intégralité du fichier jar en mémoire, tout modifier, puis réécrire dans un flux de fichiers. C'est ce que je pense que font des utilitaires comme 7-Zip et d'autres, car je pense que la ToC d'un en-tête zip doit être définie au moment de l'écriture. Cependant, je peux me tromper.
la source
Oui, vous pouvez, en utilisant SQLite, vous pouvez lire ou écrire dans une base de données à partir du fichier jar, de sorte que vous n'ayez pas à l'extraire puis à le re-jar, suivez mon message http://shoaibinamdar.in/blog/? p = 313
en utilisant la syntaxe «jdbc: sqlite :: resource:», vous pourrez lire et écrire dans une base de données à partir du fichier jar
la source
Découvrez TrueZip .
Il fait exactement ce que vous voulez (éditer des fichiers en ligne dans un fichier jar), via une API de système de fichiers virtuel. Il prend également en charge les archives imbriquées (jar dans un jar).
la source
Extraire le fichier jar par ex. avec winrar et utilisez CAVAJ:
Cavaj Java Decompiler est un utilitaire graphique gratuit qui reconstruit le code source Java à partir de fichiers CLASS.
voici un tutoriel vidéo si vous avez besoin: https://www.youtube.com/watch?v=ByLUeem7680
la source
Tant que ce fichier n'est pas .class, c'est-à-dire un fichier de ressources ou un fichier manifeste, vous le pouvez.
la source
Le moyen le plus simple que j'ai trouvé pour le faire dans Windows est avec WinRAR :
la source
la plupart des réponses ci-dessus indiquent que vous ne pouvez pas le faire pour le fichier de classe.
Même si vous souhaitez mettre à jour le fichier de classe, vous pouvez le faire également. Tout ce que vous avez à faire est de faire glisser et déposer le fichier de classe de votre espace de travail dans le pot.
Si vous souhaitez vérifier vos modifications dans le fichier de classe, vous pouvez le faire en utilisant un décompilateur comme jd-gui.
la source