零维护

 找回密码
 立即注册
快捷导航
搜索
热搜: 活动 交友 discuz
查看: 79|回复: 3

【经验分享篇01】小白如何开始学会看源码?

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-9-20 20:26:36 | 显示全部楼层 |阅读模式
前言

本文章纯粹是个人对于一个新手如何在有一定基础的情况下开始看自己的第一个开源项目做一定的解析。所以选用的是技术架构并不难的项目,对于新手来说也更加友好,纯属分享希望对于已经有一定代码基础的小伙伴们有用!

1.理解开源

1.1.什么是开源?

​        一般来说,如果提及开源,人们首先想到的是,把代码公开出去,例如放到`GitHub`上。以下详细来聊聊开源这个概念的内含和外延,来快速的了解关于开源的概念以及延伸,关于开源的最权威解释可以参考 [News | Open Source Initiative](知乎 - 安全中心) ,这个网站是开源思想诞生的地方。而在国内也同样有 [开源中国](OSCHINA - 中文开源技术交流社区)这样的开源网站
​        国内外开源社区推荐:[开源中国](OSCHINA - 中文开源技术交流社区)、[ChinaUnix](Unix技术网 = 专业的Linux/Unix应用与开发者社区 = IT人的网上家园)、[GitHub](GitHub: Where the world builds software)、[Apache](http://www.apache.org/)、[SourceForge](Download, Develop and Publish Free Open Source Software)、

1.2.开源的定义


​        先来给开源一个定义,一个软件是开源的,最基本的含义是代码是公开的,任何人都可以去查看,修改以及使用
​        首先,开源代码和闭源代码非常不同。闭源代码就是普通的商业版权软件,代码是封闭的,只有作者才能看到,出了问题也只有他能修改。而开源代码,任何人都可以查看和修改。关于开源思想的诞生,有一个很有意思的故事。`Richard Stallman `是有史以来最伟大的几名黑客之一,也是世界上写代码最多的人之一,他曾经买过一个商业软件,结果有一点小问题,于是他去找软件公司,问他们能不能帮忙修复一下,软件公司说不行,Richard 于是说,那能不能把代码给我,我来修复一下,公司也说不行。于是 Richard Stallman 很生气,创立了自由软件基金会,发布了大名鼎鼎的 GPL 协议,GPL 至今为止依然是最著名的开源协议
​        第二点需要特别注意的是,开源不等于免费。软件代码虽然可以免费给别人,但是软件相关的服务,例如编译维护升级等,一样可以赚钱,例如 Redhat 就是家开源软件公司,不仅仅赚钱,而且很赚钱。同时,很多公司有把越来越多的开发者投入到公司的开源项目中,这些软件可以有力的支撑起公司的生态,所以如果你是一个开源软件开发者,也不用担心找不到工作。
开源软件优点




经典开源软件案例




1.3.关于开源协议


开源软件在追求“自由”的同时,不能牺牲程序员的利益,否则将会影响程序员的创造激情,因此世界上现在有 60 多种被开源促进组织(Open Source Initiative)认可的开源许可协议来保证开源工作者的权益。
开源协议规定了你在使用开源软件时的权利和责任,也就是规定了你可以做什么,不可以做什么。

1.3.1.如何选择开源协议

世界上的开源协议有上百种,很少有人能彻底搞清它们之间的区别,即使在最流行的六种开源协议——GPL、BSD、MIT、Mozilla、Apache 和 LGPL——之中做选择,也很复杂。
乌克兰程序员 Paul Bagwell 画了一张分析图,说明应该怎么选择开源协议,大家看了一目了然,真是清爽。



2.如何查找开源项目

​        首先关于开源项目的查找要介绍的网站有两个,一个是 [GitHub](https://github.com/)众所周知全球最大的同性交友平台,第二个则是国内近几年火热的代码管理平台 [码云](Gitee - 基于 Git 的代码托管和研发协作平台)。想要寻找比较好的开源项目通常在这两个平台上面搜索即可,当然搜索也是需要技巧的。

代码管理平台常见关键字解析



2.1.一个仓库项目的基本解析




一些关键性信息分析



2.2.关于开源项目高级搜索

GitHub有高级搜索功能,search/advanced可以输入`关键字`、`代码库大小`、包含`作者`、`代码语`、`代码包含后缀文件名`等



注意:搜索公式可以结合使用。每个公式之间用空格隔开即可!

2.3.根据仓库标题、描述搜索

in关键词限制搜索范围


以`in:限制 搜索的具体内容`为主导进行更加精准的搜索

2.4.按照地区和语言进行搜索

​        很多时候我们的项目是要用我们会的语言,你找到了一个`Python`写的好项目,但是没学过`Python`,下载了也看不懂,同时,`为了更好的阅读README.md帮助文档以及项目注释`,我想很多同学都会想要下载中文的项目,当然英语顶呱呱的请忽略。这个时候就可以用地区和语言进行搜索。



2.5.根据仓库属性条件搜索
可以根据个人需求,可能想要找的项目并不是那么大的项目只是一些小项目就可以对项目大小进行限制。



如果想要寻找一些比较新颖的项目,不想要比较远古的项目则可以根据项目的更新时间来搜索



2.6.根据个人或某组织进行搜索
如果你想在GitHub 上找一下某个大神是不是提交了新的项目,可以对他们进行精准搜索



2.7.根据仓库的LICENSE搜索
开源项目的License(项目授权协议) 有的开源项目作者明确禁止商用了,但是你不知情下载了,并且使用了,这就会很麻烦,所以如果有搜索需要项目的时候就需要按照对应的开源协议来搜索项目。


awesome加强搜索
Awesome 似乎已经成为不少 GitHub 项目喜爱的命名之一,Awesome 往往整合了大量的同一领域的资料,让大家可以更好的学习



2.8.热门
​        GitHub Trend 页面总结了每天/每周/每月周期的热门Repositories 和 Developers,你可以看到在某个周期处于热门状态的开发项目和开发者。



GitHub Topic 展示了最新和最流行的讨论主题,在这里你不仅能够看到开发项目,还能看到更多非开发技术的讨论主题



3.开源项目解析

3.1.查找相关开源项目

​        根据用户使用情况不同(中文[Gitee](Gitee - 基于 Git 的代码托管和研发协作平台),全球性[GitHub](https://github.com/)),可以先从国内的开源网站来寻找开源项目,以下开源项目案例来自于 Gitee,在Gitee中可以根据首页的开源软件对最有价值的项目进行查看和搜索。或者可以根据推荐项目进行观察和选择项目学习



3.1.1.开源项目

本次开源项目来源于Gitee上的一个自动化[OA办公系统](程序员二师兄/oasys)。感谢大佬的开源,如果大家喜欢也可以给大佬一个start哦。办公自动化(OA)是面向组织的日常运作和管理,员工及管理者使用频率最高的应用系统,极大提高公司的办公效率。



3.2.如何分析一个开源项目

3.2.1.观察开源项目
​        首先针对于一个开源项目,要做的第一件事情应该是先观察这个开源项目的大致结构(如使用说明文档、sql文件、项目目录结构`maven`或者`gradle`等),以及所使用的语言等基本信息。



3.2.2.项目技术分析
查看说明文档-匹配技术栈与运行环境
​        根据开源项目的使用说明文档可以知道当前项目使用的是哪些技术栈,根据这些技术栈来分析是否符合自己的需求。并且查看当前项目的运行环境要求,以便进行下一步将项目运行起来。

以当前开源案例为说明技术栈如下:
前端技术



后端技术



部署注意事项

1.  下载项目、把oasys.sql导入本地数据库
2. 修改application.properties
3.  修改数据源,oasys——>自己本地的库名,用户名和密码修改成自己的
4. 修改相关路径,配置图片路径、文件路径、附件路径。(static/image/oasys.jpg 拷贝到配置的图片路径下,不然会报 FileNotFoundException )
5. OasysApplication.java中的main方法运行,控制台没有报错信息,数据启动时间多久即运行成功
6. 在浏览器中输入localhost:8088/login

3.2.3.安装环境导入项目

​        通过第一轮观察可以发现和找到相关的项目跑起来所需要的文件,那么接下去的第二步就是将这个项目导入到我们的IDE编译工具中去,并且尝试性的将这个项目运行起来,进行查看。

1.导入相关的sql文件

​        通常开源项目的作者会将项目的sql文件一起打包放入到开源项目中,在首页目录下一般都能看到相关的`xxx.sql`的文件,如果没有可以查看一下有没有==相关叫sql的文件夹==。



​        找到相关数据库文件后,新建相关数据库,并且将SQL文件进行运行



2.将项目用IDE工具打开

准备好相关的IDE工具,通常放在代码托管平台上面的项目是不会根据指定的编译器的,而是保留了Maven的核心文件即可。
通常则将IDE编译工具打开然后将对应路径上的项目进行导入即可



3.分析目录结构

在项目成功导入后可以对项目的目录结构进行一下简单的查看,看自己是否能够看懂其大概的布局再开始下一步深入的项目分析


从上图中是可以看到,就算是开源项目的目录结构也是按照平时学习过程中的标准来的,也是按层级,按功能,按资源来划分的

关于package-info.java

​        在查看开源项目的过程中可以看到很多包底下有`package-info.java`这个类,`package-info.java`是一个`Java`文件,可以放到任意`Java`源码包执行。不过里面的内容有特定的要求,其主要目的是为了提供包级别相关的操作,比如包级别的注解、注释及公共变量
1.提供包级别的注解
在对应的源码包提供包级别的注解,简单案例如下:
01.


02.


03.


如果一整个包都是过时的话,可以直接在`package-info.java`下面,添加注解`@Deprecated`,表示该源码包已过时

2.提供包级别的变量
如果想在包里面使用对应的变量,而不想让其他包使用,就可以将变量放到`package-info.java`下面,实现`分包自用`的理念。





3.方便JavaDoc文档输出
使用`JavaDoc`的时候,通过在`package-info.java`添加注释,生成`JavaDoc`实现对应包的注释说明。

3.3.Debug对项目进行分析

我们可以通过对程序项目进行断点调试,来对项目的源码功能进行分析。比如可以在最常见的登陆部分进行debug测试。


根据断点一步一步的去感受作者在写这些代码的每一步用意,看开源的意义就在于此,思考、借鉴非常的重要!

总结

所以个人总结下来有基础的情况下一开始看开源项目的流程并不是很复杂,归纳如下
1. 了解什么是开源
2. 学会去找一个适合自己想看技术架构的开源项目
3. 观察开源项目(就是看readme.md文档)以及下载开源项目
4. 将下载下来的开源项目的目录结构先进行分析,并且用IDE工具打开此开源项目
5. 将开源项目运行起来
6. 通过打断点(Debug)运行项目的方式来思考作者的思路如果觉得好就可以成为自己的借鉴代码
-------------------------------
以上观点属于个人分享,禁止转载商用,如有疑问可以私信或评论!
回复

使用道具 举报

2

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-9-20 20:26:42 | 显示全部楼层
这篇真的很棒!
回复

使用道具 举报

0

主题

4

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2025-3-12 14:33:35 | 显示全部楼层
这么强,支持楼主,佩服
回复

使用道具 举报

0

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2025-3-23 00:50:46 | 显示全部楼层
围观 围观 沙发在哪里!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver| 手机版| 小黑屋| 零维护

GMT+8, 2025-4-8 16:26 , Processed in 0.099057 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2020, LianLian.

快速回复 返回顶部 返回列表