当前位置: 首页 > news >正文

JDK源码阅读环境搭建

本次针对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.lryc.cn/news/69964.html

相关文章:

  • 基本定时器工作模式
  • 【华为OD机试真题2023B卷 JAVA】报文重排序
  • 【Docker】- 02 Docker-Compose
  • 工业相机的Pixel Binning和Pixel Skipping
  • c++ 11标准模板(STL) std::set(八)
  • linux服务器断电重启后,发现时间误差八小时
  • 兼容人大金仓,异常信息报错解决大全
  • 短睡眠 堀大辅 超短眠 人生更丰富
  • 私有GitLab仓库 - 本地搭建GitLab私有代码仓库并随时远程访问「内网穿透」
  • Debezium系列之:Debezium镜像仓库Quay.io,使用Debezium镜像仓库的方法和案例
  • 文心一言和ChatGPT最全对比
  • 龙芯2K1000实战开发-平台介绍
  • C++ map用法总结(整理)
  • 面向对象的第二个基本特征:继承011026
  • 机器学习项目实战-能源利用率 Part-3(特征工程与特征筛选)
  • WebSocket的那些事(2-实操篇)
  • BurpSuite—-Target模块(目标模块)
  • 部门来了个测试开发,听说是00后,上来一顿操作给我看呆了...
  • Godot引擎 4.0 文档 - 入门介绍 - Godot简介
  • 数据通信基础 - 码元速率 和 数据速率 详解
  • 听我一句劝,别去外包,干了三年,废了....
  • 全域兴趣电商:国货品牌的新策略、新玩法
  • 嵌入式 Linux 入门(十一、make 和 MakeFile)
  • Serverless冷扩机器在压测中被击穿问题 | 京东云技术团队
  • 数仓中指标-标签,维度-度量,自然键-代理键等各名词深度解析
  • Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C++)(Mono)
  • C++笔试笔记2
  • 手写Spring框架
  • 微服务学习笔记--(Docker)
  • ChatGPT 国内版免费