当我使用javax.tools.JavaCompiler编译源代码时如何设置classpath?

我使用类javax.tools.JavaCompiler (jdk6)编译源文件,但源文件依赖于某个jar文件。 如何设置javax.tools.JavaCompiler的类path?

javax.tools.JavaCompiler#getTask()方法使用允许设置编译器选项的options参数。 下面的消息描述了一个简单的方法来设置它们以访问调用程序的类path:

你需要configuration标准的java文件pipe理器来了解jar文件 – 你使用编译器选项参数来做到这一点。

默认情况下,java编译器对象似乎只知道bootclasspath,extdirs和endorseddirs目录的类path的默认位置。

您需要将调用程序的当前类path添加到在标准文件pipe理器上传递的java编译器实例,然后在该文件pipe理器中查找jar文件中的类。

下面是我在我编写的编译器包装中做的

 List<String> optionList = new ArrayList<String>(); // set compiler's classpath to be same as the runtime's optionList.addAll(Arrays.asList("-classpath",System.getProperty("java.class.path"))); // any other options you want optionList.addAll(Arrays.asList(options)); JavaCompiler.CompilationTask task = compiler.getTask(out,jfm,diagnostics,optionList,null,jfos); 

您只需要在运行调用程序时获取正确的类path集。

最近我遇到了同样的问题,最后我find了两个解决方法。 您可以通过调用StandardJavaFileManager.setLocation(StandardLocation.CLASS_PATH,“YOUR_CLASS_PATH”)或Compiler.getTask(ARG_0,ARG_1,ARG_2,CLASS_PATH_OPTIONS 来设置类path,就像在这里发布的第一个答案一样。