jar中的Java编译器
当从jar文件调用时,我的JavaCompiler返回一个空指针 若我从命令行用JavaCompiler运行我的程序,一切都很好。 因此,JDK已正确安装在我的操作系统上 为什么不起作用 代码:jar中的Java编译器,java,compiler-construction,jar,Java,Compiler Construction,Jar,当从jar文件调用时,我的JavaCompiler返回一个空指针 若我从命令行用JavaCompiler运行我的程序,一切都很好。 因此,JDK已正确安装在我的操作系统上 为什么不起作用 代码: JavaCompiler compiler=ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager=compiler.getStandardFileManager(null,null,null); Iterabl
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager=compiler.getStandardFileManager(null,null,null);
Iterable options=Arrays.asList(新字符串[]{“-d”,currentDir+“/cache/”,“-sourcepath”,currentDir+“/srcss/”});
Iterable您需要确保在作为jar启动应用程序时使用相同的运行时
当作为独立应用程序启动它时,您可能正在使用一些基本JRE安装中的rt.jar
,而当您在IDE中执行它时,您很可能正在使用JDK中的rt.jar
您可以执行System.out.println(System.getProperty(“java.home”)
来调试它。如果这是您自己的部署(到您自己的机器上),可以通过将SDK的tools.jar
显式添加到应用程序的运行时类路径(例如,在清单中提及)来解决问题
其他的策略可以在地图上看到(或者至少暗示)。如果你需要更多信息。关于这些,请告诉我。根据我的理解,JavaCompiler=ToolProvider.getSystemJavaCompiler();仅当java编译器的句柄在和JDK发行版下执行时,才将其返回给java编译器
如果您在JRE下使用它(通常我们只在JRE下执行),它将返回null,请确认我们是从JDK调用它,或者它包含适当的jar文件,但我的系统设置为JDK。当我从命令行启动程序时,它从JDK启动。如何将jar设置为JDK?在应用程序中打印System.getProperty(“java.home”)
返回的字符串,看看它是否不同。
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<String> options = Arrays.asList( new String[] { "-d", currentDir+"/cache/","-sourcepath",currentDir+"/srcss/"} );
Iterable<? extends JavaFileObject> compUnits = fileManager.getJavaFileObjects(fRun);
Boolean compRes = compiler.getTask(null, fileManager, null, options, null, compUnits).call();