Projet gus05 de développement Java
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -21%
LEGO® Icons 10329 Les Plantes Miniatures, ...
Voir le deal
39.59 €

Un jar capable de se déplacer au runtime

Aller en bas

Un jar capable de se déplacer au runtime Empty Un jar capable de se déplacer au runtime

Message  Gus Lun 10 Déc - 19:10

Je vais vous expliquer comment créer un jar capable de se déplacer au runtime.

Voici la marche à suivre :
  1. Localiser le fichier JAR d'origine
  2. Dupliquer ce fichier JAR dans le répertoire cible
  3. Lancer le nouveau JAR en passant en paramètre l'emplacement du fichier d'origine
  4. Terminer l'application

Évidemment, si le fichier JAR d'origine est déjà situé à bon endroit, on ne fait rien.
Il faut aussi pour bien finir le travail, penser à faire supprimer le fichier d'origine par le nouveau fichier JAR.

Code pour l'étape 1:
Code:
    private File findAppFile() throws Exception
    {
       return new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
    }
Code pour l'étape 2:
Code:
    private void copyFile(File in, File out) throws IOException
    {
        FileInputStream fis = new FileInputStream(in);
        FileOutputStream fos = new FileOutputStream(out);
       
        FileChannel inputChannel = fis.getChannel();
        FileChannel outputChannel = fos.getChannel();
       
        outputChannel.transferFrom(inputChannel,0,in.length());
       
        fis.close();
        fos.close();
    }
Code pour l'étape 3:
Code:
    private void launchJar(File jar, String args) throws Exception
   {
       if(!jar.exists()) throw new Exception("Jar file does not exist: "+jar);
       
      String command = "java -jar "+p_(jar);
      if(args!=null && !args.equals("")) command = command+" "+args;
      
      Runtime.getRuntime().exec(command,null,jar.getParentFile());
   }
   
    private String p_(File f)
   {return "\""+f.getAbsolutePath()+"\"";}
Code pour l'étape 4:
Code:
System.exit(0);
On met tout ensemble ...
Code:
    private void moveItself(File destDir) throws Exception
    {
       if(!destDir.exists()) destDir.mkdirs();
       
       File appFile = findAppFile();
       File destAppFile = new File(destDir,appFile.getName());
       
       if(appFile.equals(destAppFile)) return;
       if(destAppFile.exists()) destAppFile.delete();
       
       String args = "relocator="+appFile;
       
       copyFile(appFile,destAppFile);
       launchJar(destAppFile,args);
       System.exit(0);
    }
La dernière partie, c'est de vérifier que les arguments passés dans la méthode main contiennent le chemin d'accès du fichier "relocator", puis le cas échéant de supprimer ce fichier. (un simple delete() fera surement l'affaire mais pour plus de précaution, on pourra lancer un Thread qui boucle et tente de supprimer le fichier tant qu'il existe). Je vous laisser imaginer le code...
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum