使用javax.tools.JavaCompiler编译源码时如何设置classpath?
-
21-09-2019 - |
题
我使用类 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,就像第一个答案张贴在这里说。
不隶属于 StackOverflow