我正在尝试创建一个类来编译我将在运行时创建的一些.java,但我无法使其正常工作。
这是我的代码
File bin = new File(args[args.length-1]);
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_60");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager standardJavaFileManager = compiler.getStandardFileManager(null, null, null);
try {
standardJavaFileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(bin));
} catch (IOException e) {
System.err.println("Invalid bin directory");
e.printStackTrace();
}
List<String> options = new ArrayList<String>();
options.add("-Xlint:unchecked");
options.add("-classpath");
options.add("e:\\ParentProject.jar");
System.out.println(options);
CompilationTask compilationTask = compiler.getTask(null, standardJavaFileManager, null, options, null, standardJavaFileManager.getJavaFileObjectsFromFiles(archives));
compilationTask.call();
我正在尝试编译扩展ParentProject.jar中的类的Son.java,但它不起作用,即使使用“-classpath”标志也是如此。但是,如果我将jar添加到编译器项目的构建路径中,它就可以工作(并且它不需要classpath标志)。这是正常行为吗?
这导致了另一个问题。当我尝试在Tomcat服务器上运行的项目中使用这段代码时,即使使用WEB-INF / lib中的jar,我也无法使其工作。
答案 0 :(得分:4)
您可以将JAR添加到类路径中,如下所示:
standardJavaFileManager.setLocation(
StandardLocation.CLASS_PATH,
Arrays.asList( new File ( "path/to/ParentProject.jar" ) )
);