2010-05-24 10 views
3

Comment définir une variable CLASSPATH pendant l'exécution lors de l'utilisation d'IKVM?Définition de CLASSPATH pendant l'exécution

J'ai essayé de le faire en utilisant: java.lang.System.setProperty("java.class.path", "whatever");

La classe que je suis appel nécessite un fichier de configuration dans le classpath au travail - et je continue à avoir des erreurs qui semblent indiquer qu'il n » t gotten ses paramètres.

Est-ce que la façon dont j'essaie d'ajouter une variable est incorrecte?

Répondre

0

J'essayais de faire la même chose. J'avais des fichiers jar compilés dans une DLL .Net mais certains de ces fichiers JAR (tiers) essayaient de charger leurs fichiers de configuration à partir du classpath java.

J'ai résolu le problème en spécifiant l'option -classloader pour l'outil ikvmc. Exemple:

ikvmc -out:mydotnetapp.dll -classloader:ikvm.runtime.ClassPathAssemblyClassLoader c:/myjavaapp/lib/*.jar 

Cela a fonctionné pour moi!

Source pour la solution: http://old.nabble.com/Not-able-to-load-files-from-ClassPath-td31141788.html

3

Si vous ne pouvez vraiment pas définir le chemin à l'avance en utilisant vous -cp ou -classpath l » argument du java (pourquoi pas par la voie? C'est l'approche normale), alors vous pouvez essayer d'utiliser URLClassLoader à la place. Voici un exemple de coup d'envoi:

URL url = new URL(whateverPath); 
ClassLoader contextCL = Thread.currentThread().getContextClassLoader(); 
ClassLoader urlCL = URLClassLoader.newInstance(new URL[] { url }, contextCL); 
Thread.currentThread().setContextClassLoader(urlCL); 
// ... 

Vous avez seulement besoin d'être chanceux si la classe que vous appelez est en fait charger ses ressources par Thread.currentThread().getContextClassLoader().getResource() et donc pas par SomeClass.class.getClassLoader().getResource().

+0

La raison pour laquelle je ne peux pas définir le chemin de l'avance est que je suis en cours d'exécution du code java dans .Net (jar-fichiers recompilés à des ensembles .net) avec le IKVM VirtualMachine. IKVM ne lit pas le chemin de classe. L'exemple ci-dessus fonctionnerait bien pour n'importe quel code Java si :) – Ciddan