Ich möchte eine Methode in JAR ausführen, und die Methode sieht wie public static SomeType getValue()
aus.Abrufen eines Werts von der Klasse in einer JAR-Datei
Ich versuchte Reflexion zu verwenden und es schien in Ordnung:
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");
Aber während ein Rückgabewert wie folgt erhalten:
targetType value = targetClass.cast(getValueMethod.invoke(null));
value
‚s Art es sein kann, nicht targetType
, nicht wahr? Allerdings ist die Art SomeType
in der JAR-Datei, so kann ich wie SomeType value = ~~
Dann nicht tun, wie kann ich getValue()
‚s Wert bekommen richtig und Zugriff auf seine Daten?
Auch mit Reflexion. Aber warum machst du das? Warum befindet sich die JAR-Datei nicht in Ihrem Klassenpfad? Was versuchst du auf einer höheren Ebene zu erreichen? –
Weil 'jarFile' dynamisch geändert werden kann. Aber das Setzen eines Klassenpfads ist ein statischer Weg. – QueN