Modification d'un jar

Résolu/Fermé
Messages postés
12
Date d'inscription
jeudi 18 mai 2006
Statut
Membre
Dernière intervention
26 novembre 2009
-
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
-
Bonjour,



Voici mon problème :

Je souhaite créer un programme java qui puisse ajouter dans un jar existant un fichier texte contenu dans un répertoire quelconque de mon disque. Mon code (Très simplifié) ressemble à ça :

Runtime run = Runtime.getRuntime();
                    Process proc = run.exec(
                            "jar -uf monJar.jar documents\\monfichier.txt");

Le fichier texte est bien ajouté dans le jar, mais pas à la racine... Un répertoire "documents" a été crée et a l'intérieur de celui-ci se trouve mon fichier texte. Or, je voudrais que monfichier.txt soit placé à la racine du jar. Comment lui demander de faire abstraction du répertoire lors de la modification du jar ?

Je ne sais pas si j'ai été clair...

Merci d'avance pour votre patience et vos réponses,

5 réponses

Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

ba écoute quand j'ouvre un terminal et que je fais 'jar -uf monJar.jar -C documents monfichier.txt' cela marche impecablement bien, tu as essayé de le faire sans le vilain / a la fin du nom du répertoire ?

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

exemple pour ton cas

Runtime run = Runtime.getRuntime();
                    Process proc = run.exec(
                            "jar -uf monJar.jar -C documents monfichier.txt");

quand tu as un doute ouvre une console et tape exemple "jar" tu auras la liste des options dispo et de ce qu'elle font
Usage: jar {ctxu}[vfm0Mi] [jar-file] [manifest-file] [-C dir] files ...
Options:
    -c  create new archive
    -t  list table of contents for archive
    -x  extract named (or all) files from archive
    -u  update existing archive
    -v  generate verbose output on standard output
    -f  specify archive file name
    -m  include manifest information from specified manifest file
    -0  store only; use no ZIP compression
    -M  do not create a manifest file for the entries
    -i  generate index information for the specified jar files
    -C  change to the specified directory and include the following file
If any file is a directory then it is processed recursively.
The manifest file name and the archive file name needs to be specified
in the same order the 'm' and 'f' flags are specified.

Example 1: to archive two class files into an archive called classes.jar:
       jar cvf classes.jar Foo.class Bar.class
Example 2: use an existing manifest file 'mymanifest' and archive all the
           files in the foo/ directory into 'classes.jar':
       jar cvfm classes.jar mymanifest -C foo/ .

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
12
Date d'inscription
jeudi 18 mai 2006
Statut
Membre
Dernière intervention
26 novembre 2009

J'ai déjà consulté les options pour la commande jar et j'ai déjà tenté de simuler la commande avec l'invite de commande windows. L'option -C va en effet changer de répertoire mais lors de la modification du jar ce répertoire apparaitra toujours :

Voici la simulation que j'ai faite :
>jar -uf monjar.jar -C documents/ monfichier.txt
Or, monfichier.txt est quand même ajouté dans le jar avec le repertoire "documents". Peut-être alors que j'exécute mal la commande... Je ne sais pas...

Pour l'instant j'ai trouvé une solution temporaire à mon problème en passant par la création d'un fichier batch :

String s = "copy document\\monfichier.txt\n" +
                "jar -uf monjar.jar monfichier.txt\n" +
                "del document";
saveFile(s, "exec.bat");
Process myProcess = Runtime.getRuntime().exec("exec.bat");
File f = new File("exec.bat");
f.delete();

Ma méthode marche mais je pense qu'il y a plus propre... En tout cas merci pour ta réponse Twinuts.

D'autres suggestions ?
Messages postés
12
Date d'inscription
jeudi 18 mai 2006
Statut
Membre
Dernière intervention
26 novembre 2009

Tout ce temps perdu pour un simple slash :S.

Je me suis contenté de reproduire l'exemple donné dans la doc pour jar, à savoir :

Example 2: use an existing manifest file 'mymanifest' and archive all the
           files in the foo/ directory into 'classes.jar':
       jar cvfm classes.jar mymanifest -C foo/ .

Je ne pensais pas que le slash pouvait être la cause de mon problème. Merci ;)
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

Ba de rien et a l'avenir mais pas de slash en fin de chaine quand tu veux specifier qu'il sagit d'un répertoire les 3/4 du temps c'est cause de problèmes

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA