永发信息网

java动态编译遇到灵异事件,求围观?

答案:2  悬赏:30  手机版
解决时间 2021-11-29 03:31
java动态编译遇到灵异事件,求围观?
最佳答案
看源码不就好了?
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,就找父目录
那java.home取出来是什么?还是看源码,参考open jdk的,比较长就不帖了,有兴趣可以自己搜,发链接审核估计会不通过,反正开源的很容易找
oracle官方对java.home的定义是Installation directory for Java Runtime Environment (JRE),这个在官方的The Java™ Tutorials里可以找到
所以可以看到如果java.home取到jdk下的jre,那自然可以从父目录/lib找到tool.jar,如果取的是和jdk同级的单独安装的那个jre,就得自己复制tool.jar
全部回答

你用的应该是java8及以上版本吧。问题在于jre的安装程序,java8以后安装JRE时会向windows/System32目录写入一个java.exe这个java.exe会自动指向和jdk目录在同级的那个jre目录。就是你说的兄弟目录的jre。当运行时如果windows/System32/下能找到java.exe 就不会再使用环境变量的中指定的jdk目录下的jre了,所以必须把jdk的lib下的tools.jar拷贝到与jdk作为兄弟目录的jre下 才行。当然如果没有安装过jdk而是通过复制把jdk目录拖过去,再设置环境变量就会使用jdk目录下的jre了。当然如果你删掉windows/System32/下的java.exe,系统就会使用jdk目录下的那个jre了。检查看看你两个电脑的windows/System32/下就能明白。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
单选题She returned home from&nb
鸡有x只,鸭有45只,鸭比鸡少3/8只
在农业用地上建养鸡大棚行吗?需办什么手续
158cm 55kg 买牛仔裤,穿多大码的?
黑尖怎么玩?
硅藻门有何特征
淮阳幸福万家新花街地图
既有青春两个字又用五个字的电影
爸爸姓杨妈妈姓伍怎么取名
沈阳房屋托管公司 哪家正规啊
A公司购材料,发票开的是B公司,收款人又是转
电瓶铅现在多少钱一顿呢?
一到二十岁的情话。每一岁一句
《冥殇彼岸》最新txt全集下载
K283次火车在徐州几站台停
推荐资讯
清理固定资产需要交纳什么税
海尔xqg56-b1286内桶怎么拆
耐候性与抗UV是一样的吗
逆变充电一体机怎么能充电不能逆变220的电压
从西安电子科技大学(南校区)到航天城站A口
春来早,东风初绽
跪求口袋妖怪最强进化2.0海之魔物在哪里?找
英语的就近原则?
江湖买卖卖酒顺口溜
吃野生曲麻菜的好处与坏处
单片机LM35温度传感器接AD转换的运算公式问题
什么主板支持赛扬d336
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?