前言

最近在学习 CS61B: Data Structures,最初我使用的是 Spring 2024 版本的课程资料,但由于该版本未提供公开的自动评分器,因此无法通过 Gradescope 提交作业并获得自动评分。所以就切换到了Spring 2021的版本,并写个文章简单记录一下配置的过程

如果是第一次参加这种课程的时候难免会不清楚自己该干什么,面对各种链接不知从何下手。因此,我在本文中我会引用大量课程提供的文档链接,旨在提供一个指引。本文不可完全替代课程文档的作用,配置完以后还是建议再看一遍课程文档。


课程网站

课程主页:

课程主页里包含了你要看的视频,幻灯片,和作业文档


环境配置

课程作业通常会提供一组起始代码,我们需要在指定文件中实现或修改代码以完成任务。这些起始文件托管在 GitHub 上,因此在开始作业之前,需要将他们拉取到本地,并配置开发环境。

我们首先需要完成第一周的两个Lab。这两个 Lab 提供了完整的环境配置说明。不过,由于其面向UCB在校学生,其中部分步骤对自学者并不适用,因此阅读时可能会产生一定困惑。
所以,我在下文分解了一些步骤,暂时不需要看下面这两个链接


1 安装 IntelliJ IDEA

首先需要从 JetBrains 官网下载 IntelliJ IDEA,百度搜索下载即可。

自 2025 年 12 月起,JetBrains 已取消Community Edition 与 Ultimate Edition 的版本区分,官网仅提供统一安装包。另外,我们不需要对它进行破解,免费的社区版已经完全满足我们的使用需求

完成安装后,需要按照官方文档安装两个课程插件,请按该课程文档一步一步完成:
https://sp21.datastructur.es/materials/lab/lab1setup/lab1setup#f-installing-the-intellij-cs-61b-plugins

需要安装的插件:

  • CS 61B Plugin
  • Java Visualizer

其中 Java Visualizer 在后续学习数据结构与算法执行过程时非常有用。


2 安装Java和Git

接下来需要安装以下开发工具,请自行百度“Java安装“和“Git安装“

  • Java Development Kit (JDK)
  • Git

对于JDK,安装任意较新的稳定版本即可(例如JDK17或更高版本)


3 获取课程代码并初始化仓库

CS61B 的大多数作业都基于官方提供的代码仓库,所以我们要在本地创建一个目录,负责拉取并存放这些代码

在这里我们需要用到git,但如果你是初学者第一次接触git也没关系,现在就跟着文档走就可以,课程到最后也会系统性讲解git的原理。

首先在本地任意位置创建一个文件夹,命名为skeleton-sp21,在该文件夹中打开终端执行下面的命令,用于初始化git仓库

1
git init

接着,添加课程仓库为远程仓库,并把skeleton代码拉取到本地:

1
2
git remote add skeleton https://github.com/Berkeley-CS61B/skeleton-sp21
git pull skeleton master

现在,你的skeleton-sp21目录中应该多了很多文件夹,他们都是课程文件,日后完成作业的时候就是打开某个文件夹并编辑其中的内容。如果拉取失败,请考虑网络问题。


接下来,我们需要加载子模块。这里的原理是,skeleton-sp21仓库中的Java库文件被作为子模块管理,按照上面的clone方式无法直接得到他们,这也是cs61b特意设计的。该部分存在于Lab2 的 Getting Java Libraries

执行下列命令以加载子模块:

1
git submodule update --init

该命令会自动下载 library-sp21 子模块,并在library-sp21目录中生成一个javalib文件夹

如果子模块下载失败,也可以手动克隆,执行命令git clone https://github.com/Berkeley-CS61B/library-sp21.git,并将它放到library-sp21文件夹内

这时无论用哪种方式,library-sp21文件夹下都会额外多出来一个.git文件夹,可以把它删掉。


4 配置 Git 远程仓库

请为课程代码创建一个 私有Github仓库,用于进行版本管理和备份,后续使用自动评分器的时候也需要用到,请自行百度“Github创建私有仓库“以及“Github创建访问令牌“

在完成GitHub账户配置后,在 skeleton-sp21 目录中执行:

1
2
3
git remote add origin https://github.com/你的仓库地址.git
git commit -m "Initial commit"
git push -u origin master

这样即可将课程代码推送到自己的 GitHub 仓库。这时在github中打开你自己的仓库就可以发现你的课程代码了。后续写作业时候,也需要将代码推送到该仓库中,详见本文后续的章节。

如果你是第一次使用git,可能需要设置用户名和邮箱。注意你设置的邮箱一定要和你Github注册时用的邮箱保持一致,否则Github会认不出来你。

此时,你可能会发现library-sp21并没有被推送到你的仓库中,这是因为library-sp21目录本来是作为子模块管理的,git会自动忽略这个文件夹。如果不想让它被忽略,把skeleton-21目录下的.gitmodules文件删掉,并在.gitignore文件中!library-sp21这行的下面新增内容为:!library-sp21/**的一行即可。(但你其实没必要这么做)


5. IntelliJ IDEA 项目配置

完成上述步骤后,课程目录结构应该和下面一样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
skeleton-sp21/
├── lab1/
├── lab2/
├── lab2setup/
├── lab3/
├── lab4/
├── lab5/
├── lab6/
├── lab7/
├── lab8/
├── library-sp21/
│ └── javalib/
├── proj0/
├── proj1/
├── proj1ec/
├── proj2/
└── proj3/

CS61B Spring 2021使用Maven管理项目依赖,现在我们需要再完成一个一次性配置(如果你不知道Maven是什么也没关系,这不重要,)

请按照下面课程文档,完成其中标题为One-Time Setup的部分:
https://sp21.datastructur.es/materials/lab/lab2setup/lab2setup

注意,必须完全按照文档配置,否则可能会出现看不懂的报错。

由于课程文档基于较旧版本的 IntelliJ IDEA 编写,其中部分界面选项在新版 IDE 中已经发生变化,没有的选项跳过即可。

由于官网是英文版本的不太方便阅读,所以中文版本设置完以后应该差不多长这个样子: 1773121476251.png

最后点击 应用确认 即可保存设置。


6. 后续完成作业的流程

我强烈建议在IDEA中分别以独立项目的形式打开对应的作业目录,例如 lab3proj2,而不是直接打开整个 skeleton-sp21根目录。

每当完成作业,可以将其提交至Gradescope进行评分。请前往 Gradescope注册一个帐号,学校选择“UC Berkeley“,并输入课程代码 MB7ZPY 以添加课程。先将代码推送到git仓库中,再在Gradescope中选择对应的仓库和分支即可。

Git基础教学

Git是一个分布式版本管理工具,我们用它管理自己代码的版本,并与他人协作。下面是一个将代码从本地推送到Github仓库的完整流程:

1
2
3
4
5
6
7
8
9
10
11
12
# 进入skeleton-sp21目录
# 将所有文件添加到暂存区
git add .

# 提交变更,在引号内写说明
git commit -m "something balabala"

# (可选)查看当前状态
git status

# 推送到远程仓库
git push

7. 报错处理

如果出现 无法编译为 JVM 目标 6 配置的模块 'lab3': 当前与该模块关联的 JDK Oracle OpenJDK 21.0.7 - aarch64 不支持所需 jvm 目标 6。 报错:

如果出现 找不到插件 'org.apache.maven.plugins:maven-compiler-plugin:3.1' 报错:

如果出现 java: 程序包org.junit不存在java: 程序包ucb.gui2不存在java: 程序包ucb.util不存在 这种某些程序包找不到的情况:

  • 请在IDEA的左上角进入 文件——项目结构——库 后,点击加号添加skeleton-21/library-sp21/目录下的javalib文件夹,添加后点击应用和确认,或参考并重新完成Proj0中的IntelliJ Setup部分
  • 参考动图(来自课程文档):

1773146044291.png


本文使用CC BY-NC-SA 4.0协议进行许可