最近做一个项目,用到了ToolProvider.getSystemJavaCompiler()编译Java类
出现一个奇怪的现象:在Eclipse IDE中测试完全没有问题,部署到Web 服务器中从前台界面跑起来,就会卡着不动,也没有报错,跟踪了一下,找到ToolProvider.getSystemJavaCompiler()为null
上网搜了下,直接说就是找不到jdk lib目录下tools.jar文件,没法编译
之前我设置JAVA_HOME在java\jdk
更改为Java\jre,同时将jdk\lib下将tools.jar复制到jre\lib下
OK
编译通过
工程可以正常运行了,现在回过头来,研究下为什么要这样做呢
查看ToolProvider的源码,发现这段代码
- private static final String[] defaultToolsLocation
- = { "lib", "tools.jar" };
- private static Class<?> findClass()
- throws MalformedURLException, ClassNotFoundException
- {
- try {
- return enableAsserts(Class.forName(defaultJavaCompilerName, false, null));
- } catch (ClassNotFoundException e) {
- // ignored, try looking else where
- }
- File file = new File(System.getProperty("java.home"));
- if (file.getName().equalsIgnoreCase("jre"))
- file = file.getParentFile();
- for (String name : defaultToolsLocation)
- file = new File(file, name);
- URL[] urls = {file.toURI().toURL()};
- ClassLoader cl = URLClassLoader.newInstance(urls);
- cl.setPackageAssertionStatus("com.sun.tools.javac", true);
- return Class.forName(defaultJavaCompilerName, false, cl);
- }
它编译文件时,会找到JAVA_HOME的jre\lib\tools.jar
但是值得注意的是tools.jar并不在jre中,它是在jdk的安装目录下
所以,手动把这个jar文件从jdk目录下拷贝到了jre目录下,再次运行上面的代码就没有问题了!
相关推荐
标题 "修复win10闪退 null.sys" 描述的是一个针对Windows 10系统中Git闪退问题的解决方案。在Windows 10操作系统中,有时用户可能会遇到Git客户端或者其他应用程序因null.sys驱动程序问题而异常退出的情况。这个问题...
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); Iterable<? extends JavaFileObject> ...
JMF 的CaptureDeviceManager.getDeviceList(null)获取不到设备列表,返回值为空,的解决方法;
"null.sys 修复Git异常"这个主题涉及到的是在使用Git时遇到的一种特定问题,即系统文件null.sys可能与Git的正常运行产生了冲突,导致了异常。下面我们将深入探讨这个问题,以及如何进行修复。 首先,我们需要理解...
如果字符串为 `null`,则返回 `null`。 **示例:** ```java System.out.println(StringUtils.trim(null)); // 输出 null System.out.println(StringUtils.trim("")); // 输出 "" System.out.println(StringUtils....
Imagevue.v2.8.9.PHP.NULL-DGT
接着,我们使用`ToolProvider.getSystemJavaCompiler()`方法获取系统默认的Java编译器实例。然后,通过`JavaCompiler`接口提供的方法,我们创建了一个`StandardJavaFileManager`对象,并使用自定义的`...
Git for Windows提供了一个名为`null.sys`的设备驱动来实现类似的功能。当在安装或使用Git时遇到找不到`null.sys`的错误,可能是以下几个原因: 1. **缺少Git for Windows组件**:确保你下载并安装了完整的Git for ...
在系统移植时,如果目标平台缺少特定的硬件驱动,但该驱动在源平台上是必需的,"null.sys" 可以作为一个临时替代品,避免因缺少驱动而导致的编译错误或运行时问题。它通常不执行任何实际的硬件操作,而是简单地接收...
刚开始的时候git是可以用的,不知道操作了什么突然无法再使用git,一直报如下的错误 : ...在一台正常可以使用的电脑上拷贝c:\Windows\system32\drives\null.sys文件,复制到有问题的电脑相同的位置
StandardJavaFileManager fileManager = ToolProvider.getSystemJavaCompiler().getStandardFileManager(null, null, null); Iterable<? extends JavaFileObject> sources = fileManager....
java.sql.SQLException: null, message from server: “Host ‘223.72.41.7’ is not allowed to connect to this MySQL server” 客户端访问时报错: 解决方法: 1,登陆服务器 mysql> use mysql; //用mysql ...
这个错误表示`document.getElementById`方法未能找到匹配给定ID的元素,因此返回`null`,而当你尝试调用`null`上的任何属性或方法时,JavaScript会抛出此类型错误。 ### 错误原因 1. **元素未加载**:在使用`...
vBulletin.v3.0.17.incl.KeyGen.PHP.NULL-DGT.zip
Invision.Power.Board.v2.1.7.PHP.NULL-DGT
当尝试从一个无效的JSON字符串(如"123")创建一个`JSONObject`时,`JSONObject.fromObject()`方法并不会返回`null`,而是返回一个非空的`JSONObject`。因此,上述代码中的`if`条件永远不会满足,即使JSON对象实际上...
WowBB.v1.62.PHP.NULL-LOGiC 非常不错的一款老外的PHP论坛程序。
COPPER.2004.v2.5.Corporate.PHP.NULL.Incl.Keygen-WDYLPHP源程序,用于在线的项目管理与协作
PHPCart.v3.1.2.PHP.NULL-WDYLPHP源代码,电子购物程序【http://www.phpcart.co.uk/】