1. 本地开发
以 SkyWalking
举例。在本地编译源码前,先查看相关的文档:https://github.com/apache/skywalking/blob/v8.0.1/docs/en/guides/How-to-build.md 。大致了解后,我们就可以开始操作了。
代码拉到本地后,接着我们使用 idea
打开该项目。 但是可能我们网络不够给力或有“奇怪的力量”干扰,我们则需要改动一些配置以方便快速编译。 对 maven
来说一般都是设置 maven
加速器,如果你拉的是 docker
相关,还需要配置 docker
容器阿里云地址加速。
而我们这里主要是设置 maven
阿里云镜像以及 npm
设置淘宝镜像。
1.1 设置 maven 加速
当你执行 ./mvnw clean package -DskipTests
会发现以下很慢:
说明从 apache.snapshots
仓库拉的很慢,因此我们对它使用镜像仓库代理,其中 mirrorOf
指定对某个仓库镜像做镜像代理加速,建议 mirrorOf
做明确指定代码的镜像仓库,避免直接使用 *
代理所有镜像,导致你公司的私仓或其它仓库出现拉不到包的情况:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>aliyun-apache.snapshots</id>
<mirrorOf>apache.snapshots</mirrorOf>
<name>aliyun-for-apahce.snapshots</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
</mirrors>
</settings>
接着再执行 ./mvnw clean package -DskipTests
,就发现开始使用我们代理仓库下载了:
同理对 center
仓库也做代理:
<mirror>
<id>aliyun-center</id>
<mirrorOf>center</mirrorOf>
<name>aliyun-for-center</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
1.2 设置 npm 加速
因为有些项目里面包含前端项目(例如 Skywalking-ui
),并且前端使用了 node
技术,则建议用淘宝镜像加速,在这个案例中,如下 skywalking/apm-webapp
模块中代码如下:它使用了插件来执行
npm
命令用于生成前端代码,但是 npm
拉依赖包会比较慢,因此这里修改为淘宝镜像地址:将 registry.npmjs.org
修改为:registry.npm.taobao.org
。
1.3 编译
还有其它的设置,例如在 SkyWalking
中需要设置 gRPC
为源码包等,因为在官方的文档有详细步骤,就不做说明了。而 JavaGuide
项目不用编译,打开即可,都是 md
类型的文档。
2. 提 Issue
本地代码编译后,接着你可能会有两个操作:
2.1 Issue 艺术
Issue
本质也类似于提问,因此需要清楚的表达你的疑惑并能让别人看得懂。假如你是作者,你看到你的仓库有如下两个 Issue
,你更加中意哪个?
但是很多项目都是要求英语交流,我都是先通过谷歌翻译,接着看下翻译之后的地方哪里表述有问题,再自己手动调整,其实表述大家都看得懂,还能顺便学英语,例如我之前的 Issue:
2.2 Issue 的交流
一般 Issue
提出后,都会有相关的人做讨论和交流。以 JavaGuide
举例,里面有些 Issue
讨论也可以学到很多的东西的,如下:
上图可以看出作者对这类文章标记了 discuss
标签,这样你可以更加方便的搜索该标签查找有价值的 Issue
了。
2.3 本地基本操作
这时候我们可以撸起袖子敲代码了。定位你想要修改的代码块,你可以动手本地新建分支,修改,测试代码。
注意:秉承一个分支改动一个功能点的理念。你改动代码时,建议只改动 Issue
提及的相关的代码,如果你想这个分支做多个改动,记得同步到 Issue
中。但是如果你发现了另一个改进点,但是这两个改进点无任何联系,建议再新建个 Issue
,并再建个分支,在两个分支分别做改动。这样主要是如下理由:
涉及到的基本命令:
3. 准备 PR
3.1 PR 通过
当你 push
当你的远程仓库后,此时你打开源仓库,你会发现多了如下提示:我们点击
Compare & pull request
按钮,就会到 PR
界面了,如果作者配置了 PR
模板,我们跟着提示输入即可,PR
界面主要做两个事:
如果跟作者进行友好的交流讨论后,没什么问题,你的 PR
就会被合并接着在源仓库中就会显示当前的
PR
标题,以及你 PR
对应的 Issue
。
3.2 PR 不通过
但是更多时候 PR
会不通过,一般大概有两种:
这里建议了解如下:
4. 跟踪项目进度
我们想实时跟进项目的进度或讨论的话,可以有以下方式(国外的讨论方式就不做列举了)分别以 JavaGuide 和 SkyWalking
举例:
5. 额外
实际上,我们需要额外的插件来提高我们的效率。
Github
插件推荐两个:
idea
插件推荐一个:Maven Help
:分析某个 maven
项目的依赖关系,以及查找某个包被哪几个依赖给同时依赖的,在复杂项目中,分析项目的依赖关系很方便。
其实关注 JavaGuide
微信公众号的都会了解 JavaGuide
项目,但是项目贡献的人很少,也有很多人很久没有再继续贡献和讨论了。这篇文章只是做抛砖引玉,希望大家能能了解 JavaGuide
原项目,当然能参与进来贡献那肯定是最好的。毕竟 JavaGuide
是我贡献的开源项目里坚持最久的~希望它能一直活力四射~
最后
文章有帮助可以点个「在看」或「分享」,都是支持,我都喜欢!
我是Guide哥,Java后端开发,会一点前端知识,喜欢烹饪,自由的少年。一个三观比主角还正的技术人。我们下期再见!
本文分享自微信公众号 - JavaGuide(JavaGuide)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。