JDK源码阅读环境搭建

news/2024/10/27 2:18:10/

本次针对jdk8u版本的搭建

1.新建项目

新建java项目JavaSourceLearn ,这里我创建的是maven

image-20230520090429984

2.获取JDK源码

打开Project Structure

image-20230520085654043

找到本地JDK安装位置将src.zip解压到项目java包中

image-20230520085713356

整理下项目结构,删除用不到的目录

image-20230520090526428

提示: 添加源码到项目之后首次运行需要较长时间进行编译,建议先设置好进程堆,防止编译失败

3.构建进程堆大小

打开File -> Settings -> Build, Execution, Deployment -> Compiler

设置Build process heap size (Mbytes)

image-20230520090849390

4.调试设置

打开File -> Settings -> Build, Execution, Deployment -> Debugger -> Stepping

取消Do not step into the classes

image-20230520090923817

说明: 该设置勾选后会在Debug时不进入到相关类路径下的方法内

5. 设置源码路径

为了能够注释以及避免修改到其他项目所使用的内容,

1.添加一个名为“JavaSourceLearn1.8”的SDK

2.并将Sourcepath修改为当前项目src下的源码内容(新增)

3.移除Sourcepath中关联的src.zip(删除)

image-20230520091811390

修改项目使用的JDK为新建的JavaSourceLearn1.8

image-20230520092337761

说明: 原先JDK源码包为锁定状态,Debug进入源码后无法修改/添加注释 ,这样就可以添加注释了

6. 解决报错问题

找不到UNIXToolkit和FontConfigManager

这是因为在Windows平台下缺少了这2个java类文件所导致的。

这2个类文件可在OpenJDK网站上找到,地址:http://openjdk.java.net/,打开后点Mercurial,点jdk8u,点jdk,点browse,点src,点solaris,点classes,点sun,可以找到2个文件夹,awt和font,缺少的2个文件分别在这2个文件夹下

image-20230520092407165

image-20230520092412349

按照下图所示目录结构,新建同样名字的目录和空内容的文件

打开openJDK上同样名字的java文件,把对应的内容复制到IDEA

程序包com.sun.tools.javac.*不存在

这是缺少tools的jar包所导致的。

点击File–>Project Structure–>SDKs,手动把jdk8的tools.jar包添加到JavaSourceLearn1.8,

image-20230520092648828

这些都解决了,重新build发现还是有错误

GTKLookAndFeel类依然报红

image-20230520092803462

百度了一下也没有找到原因,觉得这是和Unit平台相关的判断,应该问题不大,注释掉启动果然OK

7.代码换行注释后, debug 错行的问题

之后在这里的源码中换行注释,打断点 debug 会出现错行的问题,并且无法显示局部变量,提示 source code does not match bytecode。

image-20230520093237785

临时解决方案:E:\workspace\JavaSourceLearn\target\classes为当前项目编译后classes的路径

让BootStrapClassLoader优先加载我们的类

-Xbootclasspath/p:"E:\workspace\JavaSourceLearn\target\classes"

在测试类中配置VM options

image-20230520094137158

image-20230520093349336

这样就不受注释的影响了,这样每次都要配置,可以配置一个模板,每次创建都自动指定

image-20230520094217813

image-20230520094253673

新建测试

/*** @author Dongguo* @date 2021/8/20 0020-9:47* @description:*/
class MyTest {@Testpublic void test1() {String array[] = {"hello", "world", "java"};List<String> list = new ArrayList<String>(Arrays.asList(array));list.add("zhangsan");System.out.println(list);list.remove("zhangsan");System.out.println(list);}
}

启动调试,F7调试进入源码内部

image-20230520114200277

此时进入到我们自己搭建的源码阅读环境中。并且可以在源码中添加自己的注释。

github

如果文章有问题请留言。


http://www.ppmy.cn/news/74866.html

相关文章

ESP32-WROOM-32 TCP通讯AT指令例程

ESP32-WROOM-32 AT指令配置TCP通讯 ESP32-WROOM-32前言固件烧录测试AT指令TCP通讯\透传ESP32配置SoftAPESP32作TCP Client连接TCP Server通讯/透传普通传输模式演示WIFI透传演示 ESP32做TCP Server连接TCP Client通讯演示 ESP32-WROOM-32 前言 软硬件准备&#xff1a; ESP32-W…

Windows使用flask部署HTML网页的方法

使用Flask python运行设计的好的html网页&#xff0c;已经配套的css和js文件&#xff1a; 前提条件 html、css 和 js 在同一个目录之下 html 内使用 css 和 js &#xff0c;需要使用相对路径flask python 程序可以和 html 不在同一个目录 即&#xff1a;python程序可以在D盘…

Java 责任链模式

责任链模式 https://mp.weixin.qq.com/s/VNQTkBE0qqC3l1aMlcW-OQ 什么是责任链 责任链模式是一种行为设计模式&#xff0c; 允许你将请求沿着处理者链进行发送。收到请求后&#xff0c; 每个处理者均可对请求进行处理&#xff0c; 或将其传递给链上的下个处理者。 使用场景 …

【总结】数据建模调研与设计

一、数据建模背景和目的 1.1 数据建模任务背景 a. xxxx 中台新增数据建模模块&#xff0c;对标行业最佳实践&#xff0c;补齐数据中台短板。 b. 以往的数据建模&#xff0c;包括数仓模型的设计、数仓模型的落地&#xff0c;都是通过第三方的工具&#xff0c;例如DBwaver、Nav…

【论文阅读】A Comparative Study on Camera-Radar Calibration Methods

目录 A Comparative Study on Camera-Radar Calibration MethodsAbstractI. INTRODUCTIONII. CALIBRATION METHODSIII. EXPERIMENTSIV. CONCLUSIONWords A Comparative Study on Camera-Radar Calibration Methods 综述文 Abstract compare three types of the calibration …

ACP(MaxCompute篇)-MaxCompute开发工具

创建MaxCompute项目 第一种创建项目方式 1.知道MaxCompute服务。 2.创建项目。 3.创建成功。 第二种创建项目的方式 1.进入DataWorks控制台。 2.创建工作空间。 3.创建的类型。 4.创建计算方式。 5.自定义选择。 6.创建成功。 MaxCompute开发工具简介 Odpscmd 安装配置 下…

ChatGPT:3. 使用OpenAI创建自己的AI网站:2. 使用 flask web框架快速搭建网站主体

使用OpenAI创建自己的AI网站 如果你还是一个OpenAI的小白&#xff0c;有OpenAI的账号&#xff0c;但想调用OpenAI的API搞一些有意思的事&#xff0c;那么这一系列的教程将仔细的为你讲解如何使用OpenAI的API制作属于自己的AI网站。博主只能利用下班时间更新&#xff0c;进度慢…

《面试1v1》synchronized

源码都背下来了&#xff0c;你给我看这 我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a; 你好&#xff0c;我看到你的简历上写着你熟悉 Java 中的 “synchronized” 关键字。你能给我讲讲它的作…