当我使用javax.tools.JavaCompiler编译源代码时,如何设置类路径?

2022-09-01 02:10:02

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


答案 1

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

您需要配置标准的java文件管理器以了解jar文件 - 您可以使用编译器选项参数来执行此操作。

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

您需要将调用程序的当前类路径添加到 java 编译器实例中,该实例在标准文件管理器上传递,然后标准文件管理器将在 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);

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


答案 2

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


推荐