我想用编程方式编译带有大量导入和依赖的Web应用程序,我可以使用javax.tools
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(System.in , System.out ,System.err, "D:/data/jeeViews/projects/seds/vcvd/main/com/vcvd/servlet/Dispatcher.java");
问题是不会导入类并抛出ClassNotFound
异常。
任何想法?
答案 0 :(得分:1)
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(System.in , System.out ,System.err, "/home/visruth/Desktop/Sample.java");
Sample.java:
public class Sample {
public static void main(String... args) {
System.out.println("Hello world");
}
}
以上代码适合我。
确保您提供的路径"D:/data/jeeViews/projects/seds/vcvd/main/com/vcvd/servlet/Dispatcher.java"
有效。
请在Dispatcher.java
中发布代码。因为,如果它引用其中的其他类,也可能会产生此异常。例如,假设在 Sample.java 存在的同一位置还存在另一个 Another.java 文件。如果修改上述 Sample.java ,可能会在Another another = new Another();
上发生此异常,因为它引用了类路径中的另一个类。
public class Sample {
public static void main(String... args) {
// makes exception as it is not in the class path.
// to avoid exception make it available in the class path.
Another another = new Another();
System.out.println("Hello world");
}
}
Another.java:
public class Another {
//codes........
}
更好的解决方案是使用构建工具,例如ant。
答案 1 :(得分:0)
ClassNotFound
例外基本上就是它所说的。
找不到要编译的文件。
这意味着两件事之一
您指向错误的位置(希望不是)
您正在使用Package或其他类的未编译文件。例如:如果您使用包C
类A
,则必须确保在编译类之前编译包C
类A
。
(这适用于您导入的任何课程)