Salve a tutti! Devo realizzare un sistema a "plugin". Finora ho sviluppato tutto in un'unica applicazione, separando in package differenti le classi che andranno a costituire il mio plugin.
Quindi nel flusso della mia applicazione principale ad un certo punto ho un a cosa del genere:
codice:
InputPlugin ip = new NomePlugin(parameters);
Dove
InputPlugin è un'interfaccia
NomePlugin è il nome della classe che implementa quell'interfaccia
parameters è un'istanza di tipo Map<String, String>

Ora mi trovo a dover staccare questi plugin e metterli ognuno in differenti jar.
Ed in effetti ho fatto così. A questo punto nella mia applicazione principale non potrò più avere un'istruzione come quella riportata precedentemente, ma il caricamento dovrà essere dinamico in base al nome del plugin che intendo caricare. Ho fatto come segue (ho trovato il codice in rete):
codice:
String inputPluginJarPath = "jar:file://" + inputPluginPath + "!/";
ClassLoader inputPluginLoader = URLClassLoader.newInstance(new URL[] { new URL(inputPluginJarPath) });
Class<?> myclassloader = inputPluginLoader.loadClass(inputPluginName);
InputPlugin inputPlugin = (InputPlugin) myclassloader.newInstance();
L'ultima istruzione mi dà però una InstantiationException, senza ulteriori informazioni.
Ho creato anche un costruttore vuoto e senza parametri nella classe che dovrei caricare, ma senza risolvere nulla...
In sostanza, come posso avere nella variabile inputPlugin un'istanza della classe di cui conosco il nome (e il relativo nome del jar che la contiene)?

Grazie.