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 {
    @Test
    public 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.mfbz.cn/a/21267.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零玩转设计模式之原型模式-yuanxingmoshi

title: 从零玩转设计模式之原型模式 date: 2022-12-11 20:05:35.488 updated: 2022-12-23 15:35:44.159 url: https://www.yby6.com/archives/yuanxingmoshi categories: - 设计模式 tags: - 设计模式 - 原型模式 什么是原型模式设计模式? 原型模式是一种软件设计模式&#…

公司招了一个00后,以为是个小年轻,没想到人家是个卷王...

公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资也不低&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。 令我印象最深的是一个00后测试员&#xff0c;…

【Linux高级 I/O(2)】如何使用阻塞 I/O 与非阻塞 I/O?——select()函数

上次我们虽然使用非阻塞式 I/O 解决了阻塞式 I/O 情况下并发读取文件所出现的问题&#xff0c;但依然不够完美&#xff0c;使得程序的 CPU 占用率特别高。解决这个问题&#xff0c;就要用到本文将要介绍的 I/O 多路复用方法。 何为 I/O 多路复用 I/O 多路复用&#xff08;IO m…

AI 将完全取代前端开发吗?

注&#xff1a;今晨&#xff0c;我浏览 Medium&#xff0c;看到了篇颇为标题党的文章&#xff0c;于是我就将它抛给了 ChatGPT。本篇文章全部由 ChatGPT 所写。同时&#xff0c;我也请 ChatGPT 分享了它对此的观点。 最近&#xff0c;我的同事向我讲述了他与他老板的一次谈话。…

Python机器学习:Scikit-learn和TensorFlow的应用和模型设计

一、引言 Python在机器学习领域中已经成为非常受欢迎的编程语言。Scikit-learn和TensorFlow是Python中应用最广泛的两个机器学习库&#xff0c;它们提供了丰富的机器学习算法和工具&#xff0c;帮助开发人员轻松地构建和训练机器学习模型。本文将详细介绍Scikit-learn和Tensor…

功率放大器的选型原则和方法是什么

功率放大器是一种能够将低电平信号放大到足够高的电平以驱动负载的电子器件。在各种电子设备中&#xff0c;功率放大器被广泛应用&#xff0c;如音响系统、电视广播、汽车音响、射频通信等。因此&#xff0c;正确选型功率放大器非常重要&#xff0c;可以提高设备的性能和可靠性…

如何在linux中配置JDK环境变量

在linux系统部署皕杰报表&#xff0c;因皕杰报表是一款纯java报表工具&#xff0c;运行时需要jre环境&#xff0c;所以要在服务器上配置三个jdk环境变量path、classpath、JAVA_HOME。 那么为什么要配置jdk环境变量呢&#xff1f;因为java软件运行时要用到一些java命令&#xff…

Python挑选出无Labelme标注文件的图片文件

Python挑选出无Labelme标注文件的图片文件 前言前提条件相关介绍实验环境Python挑选出无Labelme标注文件的图片文件代码实现输出结果 前言 本文是个人使用Python处理文件的电子笔记&#xff0c;由于水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。 (https://blog.…

JAVA常用API - Runtime和System

文章目录 前言 大家好,我是最爱吃兽奶,今天给大家带来JAVA常用API中的Runtime类和System类 那么就让我们一起去看看吧! 一、Rubtime 1.Rubtime是什么? 2.Runtime常用方法 Runtime提供了很多方法,在这里演示两个 public static Runtime getRuntime(): 返回当前运行时环境的…

Ada 语言学习(3)复合类型数据——Array

文章目录 Array数据类型声明数组索引数组范围数组复制数组初始化直接赋值通过拷贝赋值不同索引范围但长度相等非指定类型边界收缩 多维数组数组遍历数组切片访问和动态检查直接访问动态检查 数组字面量 Array literal数组拼接两个数组拼接数组和单个值拼接 Array Equality&…

SpringBoot【开发实用篇】---- 整合第三方技术(消息)

SpringBoot【开发实用篇】---- 整合第三方技术&#xff08;消息&#xff09; 消息的概念Java处理消息的标准规范JMSAMQPMQTTKafka 购物订单发送手机短信案例订单业务短息处理业务 SpringBoot整合ActiveMQ安装整合 SpringBoot整合RabbitMQ安装整合&#xff08;direct模型&#x…

加密解密软件VMProtect教程(六):主窗口之控制面板“项目”部分(2)

VMProtect 是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

solidworks2020及麦迪工具箱安装

1、麦迪工具箱安装 1&#xff09;下载 下载链接&#xff1a;www.maidiyun.com/download 下载今日制造 2&#xff09;安装 由于电脑上安装了杀毒软件&#xff0c;会直接删除解压后的安装包&#xff0c;因此需要关闭杀毒软件或者在被删除后进入杀毒软件的隔离区将该文件添加…

Tomcat安装与使用

Tomcat 是HTTP服务器&#xff0c;用于使用HTTP协议。 1、下载Tomcat 下载链接&#xff1a;https://tomcat.apache.org/ 进入官网后&#xff0c;根据自己想要下载的版本进行下载&#xff0c;我这里选择下载的版本是Tomcat 8. 点击选择自己想要下载的对应版本&#xff0c;下载Z…

Netty入门

Netty入门 1. 概述 1.1 Netty是什么&#xff1f; Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.以上片段摘自官网&#xff0c;Netty 是一个异步的、基于事…

三十六、链路追踪、配置中心

1、链路追踪 在一次调用链路中&#xff0c;可能设计到多个微服务&#xff0c;如果在线上&#xff0c;某个微服务出现故障&#xff0c;如何快速定位故障所在额微服务呢。 可以使用链路追踪技术 1.1链路追踪介绍 在大型系统的微服务化构建中&#xff0c;一个系统被拆分成了许多微…

chatgpt赋能Python-python3_排序

Python3 排序指南&#xff1a;介绍、说明和实践 Python3是当今最受欢迎的编程语言之一&#xff0c;拥有许多可用于各种任务的库和框架。其中之一是它自带的排序函数&#xff0c;在数据分析和机器学习等领域中非常有用。 在本篇文章中&#xff0c;我们将简要介绍Python3的排序和…

基于AT89C51单片机的贪吃蛇游戏设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87778030 源码获取 主要内容: 设计一个贪吃蛇游戏,使其具有以下游戏规则:①当没有改变方向时,贪吃蛇沿原来路径一直前进②贪吃蛇无法回头,只能异于当前方向改变行动③蛇…

第7章链接:如何动态连接共享库、从应用程序中加载和链接共享库

文章目录 7.10 动态链接共享库静态库的缺点何为共享库共享库的"共享"的含义动态链接过程 7.11 从应用程序中加载和链接共享库运行时动态加载和连接共享库的接口 dlopen函数 dlsym函数 dlclose函数 dlerror动态加载和链接共享库的应用程序示例 7.12 *与位置无关的代码…

强大,Midjourney Imagine API接口,AI画画的福音!

前几天跟大家分享过一篇 ”让chatGPT教你AI绘画|如何将chatGPT与Midjourney结合使用&#xff1f;“&#xff0c;但是由于许多小伙伴们使用Midjourney还有许多困难&#xff0c;又要上网&#xff0c;还要注册Discord&#xff0c;MJ的使用成本很高&#xff0c;让大家望而却步&…