web-dev-qa-db-fra.com

Exécuter un fichier .jar à partir d'un programme Java

Comment puis-je exécuter un fichier JAR local à partir d'un programme Java?

Le fichier jar ne se trouve pas dans le chemin de classe du programme appelant Java.

32
vfgjrk

Je vous suggère d'utiliser une ProcessBuilder et de démarrer une nouvelle JVM.

Voici quelque chose pour vous aider à démarrer:

ProcessBuilder pb = new ProcessBuilder("/path/to/Java", "-jar", "your.jar");
pb.directory(new File("preferred/working/directory"));
Process p = pb.start();
38
aioobe
    Process proc = Runtime.getRuntime().exec("Java -jar Validate.jar");
    proc.waitFor();
    // Then retreive the process output
    InputStream in = proc.getInputStream();
    InputStream err = proc.getErrorStream();

    byte b[]=new byte[in.available()];
    in.read(b,0,b.length);
    System.out.println(new String(b));

    byte c[]=new byte[err.available()];
    err.read(c,0,c.length);
    System.out.println(new String(c));
11
Anderson Lopes

Une autre façon de faire sur Windows est: 

Runtime.getRuntime().exec("cmd /c start jarFile");

de cette façon, vous pouvez également définir la priorité de votre processus (normal/faible/etc).

4
Johnydep

Premièrement, la description de votre problème n’est pas claire. Je ne comprends pas si vous souhaitez charger les classes du fichier jar à utiliser dans votre application ou si le fichier jar contient un fichier principal que vous souhaitez exécuter. Je vais supposer que c'est la seconde.

Si c'est le cas, vous avez beaucoup d'options ici . La plus simple serait la suivante:

String filePath; //where your jar is located.
Runtime.exec(" Java -jar " + filepath);

Voila ... Si vous n'avez pas besoin de lancer le fichier jar mais de charger les classes, faites le moi savoir.

3
Nikola Yovchev

Vous pouvez exécuter un fichier jar à partir de n'importe quel endroit en utilisant uniquement ce code sur une ligne.

    Desktop.getDesktop().open(new File("D:/FormsDesktop.jar"));

new File("your path to jar")

J'espère que ça aide.

Merci.

2
Syeda Zunairah

Est-ce que quelque chose comme ce qui suit pourrait être utile?

http://download.Oracle.com/javase/tutorial/deployment/jar/jarclassloader.html

2
Chris Dennett
  1. Ajouter la bibliothèque de jar à votre projet
  2. Importer la classe principale (voir manifeste dans le fichier jar)
  3. Invoquer une méthode static avec des arguments

    String args[] = {"-emaple","value"};
    PortMapperStarter.main(args);