为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃无极 2019-12-04 09:44:30
我使用类javax.tools.JavaCompiler(jdk6)来编译源文件,但是源文件取决于某些jar文件。如何设置的类路径javax.tools.JavaCompiler?
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

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


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


默认情况下,java编译器对象似乎仅根据其类路径了解bootclasspath,extdirs和endorseddirs目录的默认位置。


您需要将调用程序的当前类路径添加到通过标准文件管理器传递的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);

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


查看完整回答
反对 回复 2019-12-04
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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


查看完整回答
反对 回复 2019-12-04
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

为了使它正常工作,我需要做StandardJavaFileManager.setLocation(StandardLocation.CLASS_PATH, Arrays.asList(new File(classpath)));

查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 1269 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信