Ich habe eine Java-Anwendung, die in Eclipse entwickelt wurde.ClassNotFoundException wenn außerhalb von IDE ausgeführt
Es gibt einen Ordner auf dem System, der viele ".java" -Dateien enthält. Diese ".java" -Dateien sind Klassen, die ein Benutzer geschrieben hat. Ich möchte alle diese Java-Klassen laden und sie in meiner Java-Anwendung kompilieren.
Eine weitere Eigenschaft aller ".java" -Dateien ist, dass alle darin enthaltenen Klassen eine Klasse erweitern, die sich in meiner ursprünglichen Anwendung befindet.
Ich habe Folgendes verwendet, um alle Klassen zu lesen und zu kompilieren.
File parentFile = new File(rulesDir + "\\");
String fileName = rulesDir + "\\" + ruleName + ".java";
File ruleFile = new File(fileName);
// Compile source file.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, ruleFile.getPath());
// Load and instantiate compiled class.
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { parentFile.toURI().toURL() });
Class<? extends AbstractRule> cls = (Class<? extends AbstractRule>)Class.forName(ruleName, true, classLoader);
Wenn ich den obigen Code in Eclipse ausführen, funktioniert es gut. Wenn ich die Anwendung als ein Gefäß aus anderen Ländern laufen, wirft es ein
für die Linie ClassNotFoundException
Class<? extends AbstractRule> cls = (Class<? extends AbstractRule>)Class.forName(ruleName, true, classLoader);
Warum ist das passiert? Was ist anders, dass es in Eclipse ausgeführt wird und nicht über die Befehlszeile?
Ist die IDE, die in Eclipse verwendet wird, dieselbe Version wie die, von der aus Sie JAR ausführen? Um Ihre Eclipse JRE zu überprüfen: Klicken Sie auf "Fenster" und dann auf "Einstellungen", wählen Sie unter Java im Menü Einstellungen die Option Installierte JREs. –
Es gibt eine fehlende Klammer vor Class.forName. Tippfehler? – ManoDestra
Bearbeitet. Das war ein Tippfehler.Keine Syntaxfehler in Eclipse – Kaushik