我使用类javax.tools.JavaCompiler
(jdk6)来编译源文件,但源文件依赖于某个jar文件。如何设置javax.tools.JavaCompiler
?
答案 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)来设置类路径,就像这里发布的第一个答案所说的那样。