Exécution d’une application jar à partir d’un lien spécifique

Author:


{filelink=4321}

l’utilisation de la classe se fait comme suit:

ExécuteurJar url [args..]

d’où ‘url’ représente le lien du fichier ‘Jar’ à exécuter et ‘args’ qui est optionnel
représente les arguments à passer en ligne de commande.


import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.JarURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.jar.Attributes;

/**
 * Exécuter un fichier Jar à partir d'un lien:
 * l'utilisation  de la classe est ExécuteurJar url [args..]
 * d'où url est le lien du fichier Jar et args qui est optionnel
 * est les arguments à passer à la méthode principale.
 */

public class ExécuteurJar {
  public static void main(String[] args) {
    if (args.length < 1) {
      usage();
    }
    URL url = null;
    try {
      url = new URL(args[0]);
    } catch (MalformedURLException e) {
      fatal("URL Invalid: " + args[0]);
    }
    // Création de la classe loader pour le fichier jar
    ClassLoaderJAR cl = new ClassLoaderJAR(url);
    // Obtenir le nom de la classe principale
    String name = null;
    try {
      name = cl.getMainClassName();
    } catch (IOException e) {
      System.err.println("Erreur d' E/S pendant le chargement de fichier  JAR:");
      e.printStackTrace();
      System.exit(1);
    }
    if (name == null) {
      fatal("Le fichier JAR spécifié ne contient pas de classe principale");
    }
    // Lire les arguments de l'application
    String[] newArgs = new String[args.length - 1];
    System.arraycopy(args, 1, newArgs, 0, newArgs.length);
    // Invoque la classe principale de l'application
    try {
      cl.invokeClass(name, newArgs);
    } catch (ClassNotFoundException e) {
      fatal("Classe introuvable: " + name);
    } catch (NoSuchMethodException e) {
      fatal("Aucune méthode principale trouvée!: " + name);
    } catch (InvocationTargetException e) {
      e.getTargetException().printStackTrace();
      System.exit(1);
    }
  }

  private static void fatal(String s) {
    System.err.println(s);
    System.exit(1);
  }

  private static void usage() {
    fatal("Exemple d'utilisation: java ExécuteurJar url [args..]");
  }
}

/**
 * Création d'une classe Loader pour les Fichiers JAR
 */

class ClassLoaderJAR extends URLClassLoader {
  private URL url;

  /**
   * Créer un nouveau ClassLoaderJAR pour l'URL spécifié
   * @param url
   *  url de fichier jar
   */
  public ClassLoaderJAR(URL url) {
    super(new URL[] { url });
    this.url = url;
  }

  /**
   *
   * Cette méthode retourne le nom de la classe principale, ou null s'il n'existe pas de classe principale
   */
  public String getMainClassName() throws IOException {
    URL u = new URL("jar", "", url + "!/");
    JarURLConnection uc = (JarURLConnection) u.openConnection();
    Attributes attr = uc.getMainAttributes();
    return attr != null ? attr.getValue(Attributes.Name.MAIN_CLASS) : null;
  }

  public void invokeClass(String name, String[] args)
      throws ClassNotFoundException, NoSuchMethodException,
      InvocationTargetException {
    Class c = loadClass(name);
    Method m = c.getMethod("main", new Class[] { args.getClass() });
    m.setAccessible(true);
    int mods = m.getModifiers();
    if (m.getReturnType() != void.class || !Modifier.isStatic(mods)
        || !Modifier.isPublic(mods)) {
      throw new NoSuchMethodException("main");
    }
    try {
      m.invoke(null, new Object[] { args });
    } catch (IllegalAccessException e) {

    }
  }

}

A Voir sur le même Sujet:

  • exemple programmation réseaux en java utilisation de la classe URLConnection
  • lien appli jar
  • executer une application
  • applications hejri jar
  • Calendrier Hijri Mobile Jar
  • calendrier hijri:jar
  • calendrier hijri.jar
  • executer un jar à partir java

Leave a Reply

Your email address will not be published. Required fields are marked *