2017-09-14 2 views
0

Je souhaite créer une application qui s'exécute et qui contient un dossier contenant des fichiers JAR avec des mini-jeux. Je voudrais créer ces mini-jeux séparément car ce sera plus facile d'échanger les jeux dans et hors. Je ne sais pas comment charger ces fichiers jar dans mon autre application déjà en cours d'exécution, de sorte que je peux simplement accéder aux classes dans les fichiers jar et invoquer les bonnes méthodes avec mes annotations. Donc, TL; DR, comment ajouter des classes à mon classpath à l'exécution?JAVA - Exécuter un fichier JAR externe au démarrage

Cordialement, Stan

+0

ce que l'on entend par 'ajouter des classes sur runtime' ? N'obtient pas quel comportement d'exécution vous voulez dans votre application. – Ankit

+0

@Ankit Je dois pouvoir ajouter les fichiers jar au classpath lors du premier lancement de l'application principale. Donc, je peux facilement échanger les 'mini-jeux' (fichiers jar) – Stannies

Répondre

1

Ce que vous faites est sans doute pas la meilleure façon d'aller, à mon avis. Cela dit, voici une explication qui vous aidera à atteindre ce que vous voulez:

Java fonctionne avec ClassLoader qui est un objet Java qui charge les classes à partir d'un chemin spécifique, généralement ce serait la Java class_path. Pour charger dynamiquement un pot, vous pouvez simplement créer un URLClassLoader avec un URL référençant votre pot, ou bien ajouter le pot URL au ClassLoader actuel ou au système ClassLoader, en fonction de votre cas d'utilisation. Une fois le fichier jar chargé, vous pourrez instancier une instance de votre classe Java. Voici un exemple de création d'un nouveau Classloader avec un pot spécifique:

URL url = new File(jarPath).toURI().toURL(); 
URLClassLoader classLoader = new URLClassLoader(url); 
Object yourObject = Class.forName(className, true, classLoader).newInstance(); 

Bien sûr, vous devez adapter la création d'une nouvelle instance de votre classe, etc.

+1

Pourriez-vous partager ce que vous pensez être la meilleure façon d'y aller? Merci pour la réponse btw, fonctionne. – Stannies

+0

@Stannies Ce code est utilisé lorsque vous devez charger dynamiquement des jars inconnus au moment de la construction. Si les jars sont connus à l'avance, placez-les tous dans le class_path de votre projet et vous pourrez ensuite référencer leurs classes sans avoir besoin de charger les jars, etc. – zuckermanori