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

时间:2009-10-14 02:04:45

标签: java jdk1.6 java-compiler-api jsr199

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

的类路径

2 个答案:

答案 0 :(得分:39)

javax.tools.JavaCompiler#getTask()方法采用options参数,允许设置编译器选项。以下message描述了设置它们以便访问调用程序的类路径的简单方法:

  

您需要配置标准   java文件管理器要了解一下   jar文件 - 您使用编译器   选项参数来做到这一点。

     

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

     

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

     

以下是我在the compiler wrapper I wrote

中的表现方式
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);

然后,您需要的是在运行调用程序时设置正确的类路径。

答案 1 :(得分:4)

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