• 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 会发现以下很慢:我参与了两个接近100k+star的开源项目!聊聊开源项目贡献指南-LMLPHP

    说明从 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,就发现开始使用我们代理仓库下载了:我参与了两个接近100k+star的开源项目!聊聊开源项目贡献指南-LMLPHP

    同理对 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 模块中代码如下:我参与了两个接近100k+star的开源项目!聊聊开源项目贡献指南-LMLPHP它使用了插件来执行 npm 命令用于生成前端代码,但是 npm 拉依赖包会比较慢,因此这里修改为淘宝镜像地址:将 registry.npmjs.org 修改为:registry.npm.taobao.org

    1.3 编译

    还有其它的设置,例如在 SkyWalking 中需要设置 gRPC 为源码包等,因为在官方的文档有详细步骤,就不做说明了。而 JavaGuide 项目不用编译,打开即可,都是 md 类型的文档。

    2. 提 Issue

    本地代码编译后,接着你可能会有两个操作:

    2.1 Issue 艺术

    Issue 本质也类似于提问,因此需要清楚的表达你的疑惑并能让别人看得懂。假如你是作者,你看到你的仓库有如下两个 Issue,你更加中意哪个?

    但是很多项目都是要求英语交流,我都是先通过谷歌翻译,接着看下翻译之后的地方哪里表述有问题,再自己手动调整,其实表述大家都看得懂,还能顺便学英语,例如我之前的 Issue:
    我参与了两个接近100k+star的开源项目!聊聊开源项目贡献指南-LMLPHP

    2.2 Issue 的交流

    一般 Issue 提出后,都会有相关的人做讨论和交流。以 JavaGuide 举例,里面有些 Issue 讨论也可以学到很多的东西的,如下:我参与了两个接近100k+star的开源项目!聊聊开源项目贡献指南-LMLPHP

    上图可以看出作者对这类文章标记了 discuss 标签,这样你可以更加方便的搜索该标签查找有价值的 Issue 了。

    2.3 本地基本操作

    这时候我们可以撸起袖子敲代码了。定位你想要修改的代码块,你可以动手本地新建分支,修改,测试代码。
    注意:秉承一个分支改动一个功能点的理念。你改动代码时,建议只改动 Issue 提及的相关的代码,如果你想这个分支做多个改动,记得同步到 Issue 中。但是如果你发现了另一个改进点,但是这两个改进点无任何联系,建议再新建个 Issue,并再建个分支,在两个分支分别做改动。这样主要是如下理由:

    涉及到的基本命令:

    3. 准备 PR

    3.1 PR 通过

    当你 push 当你的远程仓库后,此时你打开源仓库,你会发现多了如下提示:我参与了两个接近100k+star的开源项目!聊聊开源项目贡献指南-LMLPHP我们点击 Compare & pull request 按钮,就会到 PR 界面了,如果作者配置了 PR 模板,我们跟着提示输入即可,PR 界面主要做两个事:

    如果跟作者进行友好的交流讨论后,没什么问题,你的 PR 就会被合并我参与了两个接近100k+star的开源项目!聊聊开源项目贡献指南-LMLPHP接着在源仓库中就会显示当前的 PR 标题,以及你 PR 对应的 Issue

    3.2 PR 不通过

    但是更多时候 PR 会不通过,一般大概有两种:

    这里建议了解如下:

    4. 跟踪项目进度

    我们想实时跟进项目的进度或讨论的话,可以有以下方式(国外的讨论方式就不做列举了)分别以 JavaGuide 和 SkyWalking 举例:

    5. 额外

    实际上,我们需要额外的插件来提高我们的效率。

    Github 插件推荐两个:

    idea 插件推荐一个:Maven Help:分析某个 maven 项目的依赖关系,以及查找某个包被哪几个依赖给同时依赖的,在复杂项目中,分析项目的依赖关系很方便。

    其实关注 JavaGuide 微信公众号的都会了解 JavaGuide 项目,但是项目贡献的人很少,也有很多人很久没有再继续贡献和讨论了。这篇文章只是做抛砖引玉,希望大家能能了解 JavaGuide  原项目,当然能参与进来贡献那肯定是最好的。毕竟 JavaGuide 是我贡献的开源项目里坚持最久的~希望它能一直活力四射~

    最后

    我参与了两个接近100k+star的开源项目!聊聊开源项目贡献指南-LMLPHP

    文章有帮助可以点个「在看」或「分享」,都是支持,我都喜欢!

    我是Guide哥,Java后端开发,会一点前端知识,喜欢烹饪,自由的少年。一个三观比主角还正的技术人。我们下期再见!

    本文分享自微信公众号 - JavaGuide(JavaGuide)。
    如有侵权,请联系 support@oschina.cn 删除。
    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    09-03 14:04
    查看更多