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

有帮助吗?

解决方案

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

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

默认情况下,Java编译器对象似乎仅知道BootClassPath,Extdirs和Carsorseddirs目录的默认位置,从其类Path的角度来看。

您需要将调用程序的当前类路径添加到Java编译器实例中,该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);

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

其他提示

发生,我同样的问题最近,终于让我找到两种解决方法。您可以设置类路径或者通过调用 StandardJavaFileManager.setLocation(StandardLocation.CLASS_PATH, “YOUR_CLASS_PATH”)或Compiler.getTask(ARG_0,ARG_1,ARG_2,CLASS_PATH_OPTIONS,就像第一个答案张贴在这里说。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top