Je souhaite exécuter une méthode dans JAR et la méthode ressemblera à public static SomeType getValue()
.Obtention d'une valeur de la classe dans un fichier JAR
J'ai essayé d'utiliser la réflexion et il semblait bien:
URLClassLoader classLoader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()}, Main.class.getClassLoader());
Class targetClass = classLoader.loadClass("some.package.TargetClass");
Class targetType = classLoader.loadClass("some.package.SomeType");
Method getValueMethod = targetClass.getMethod("getValue");
Mais tout en obtenant une valeur de retour comme ceci:
targetType value = targetClass.cast(getValueMethod.invoke(null));
Type de
value
ne peut pas être targetType
, non? Cependant, le type SomeType
est dans le fichier JAR, donc je ne peux pas faire comme SomeType value = ~~
Alors, comment puis-je obtenir la valeur de getValue()
correctement et accéder à ses données?
Utilisation de la réflexion aussi. Mais pourquoi fais-tu ça? Pourquoi le fichier jar n'est-il pas dans votre classpath? Qu'est-ce que vous essayez d'atteindre, à un niveau supérieur? –
Parce que jarFile peut être modifié dynamiquement. Mais définir un classpath est une manière statique. – QueN