blob: 0e7ff9db4731f907750e5bafb2213b9bb7a07541 [file] [log] [blame]
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – Contributor 指南</title><link>https://dubbo.apache.org/zh-cn/contact/contributor/</link><description>Recent content in Contributor 指南 on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><atom:link href="https://dubbo.apache.org/zh-cn/contact/contributor/index.xml" rel="self" type="application/rss+xml"/><item><title>Contact: 如何成为 Dubbo Committer</title><link>https://dubbo.apache.org/zh-cn/contact/contributor/become-a-committer_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/contact/contributor/become-a-committer_dev/</guid><description>
&lt;p>每个人都可以成为 Apache 项目的贡献者。作为一个贡献者只是意味着你对项目感兴趣并以某种方式做出贡献,从提出合理的问题(这些问题记录了项目并向开发人员提供反馈)到提供新的特性作为补丁。&lt;/p>
&lt;p>如果你成为对一个项目有价值的贡献者,你有可能被邀请成为一个 Committer。Committer 是 ASF(Apache 软件基金会)中用来表示提交特定项目的人的术语。它给你带来对项目仓库和资源写的权限。&lt;/p>
&lt;p>在 Dubbo 社区,如果一个 Committer 获得大量的优秀成绩,就可以被邀请加入项目管理委员会(PMC)。&lt;/p>
&lt;p>当您不熟悉ASF使用的开源的开发过程时,有时难以理解的一点,就是我们更重视社区而不是代码。一个强大而健康的社区将受到尊重,成为一个有趣和有益的地方。更重要的是,一个多元化和健康的社区可以长时间的持续支持代码,即使个别公司在这个领域来来往往,也是如此。&lt;/p>
&lt;p>更多详细信息可以在 &lt;a href="https://community.apache.org/contributors/">这里&lt;/a> 找到。&lt;/p>
&lt;h3 id="我可以贡献什么">我可以贡献什么?&lt;/h3>
&lt;p>请参阅&lt;a href="../new-contributor-guide_dev/">新的贡献者指南&lt;/a>。&lt;/p></description></item><item><title>Contact: 新贡献者向导</title><link>https://dubbo.apache.org/zh-cn/contact/contributor/new-contributor-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/contact/contributor/new-contributor-guide_dev/</guid><description>
&lt;p>这篇向导旨在给正在准备向 Dubbo 提交贡献的新手提供指导。&lt;/p>
&lt;h3 id="邮件列表描述">邮件列表描述&lt;/h3>
&lt;p>邮件列表是 Dubbo 官方推荐的讨论方式,所有与 Dubbo 相关的内容都可以在这里讨论,请点击 &lt;a href="https://github.com/apache/dubbo/issues/1393">Issue&lt;/a> 了解更多关于邮件列表订阅的内容&lt;/p>
&lt;p>如需订阅如下邮件列表,请参考 &lt;a href="../mailing-list-subscription-guide_dev">邮件列表订阅向导&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="mailto:dev@dubbo.apache.org">dev@dubbo.apache.org&lt;/a>:开发邮件列表,您在使用或者开发 Dubbo 的过程中遇到的任何问题,都可以在这里进行提问。&lt;/li>
&lt;li>&lt;a href="mailto:commits@dubbo.apache.org">commits@dubbo.apache.org&lt;/a>:所有的提交内容都会推送到这个邮件列表,如果您对 Dubbo 的进展感兴趣,可以订阅这个邮件列表。&lt;/li>
&lt;li>&lt;a href="mailto:issues@dubbo.apache.org">issues@dubbo.apache.org&lt;/a>:所有的 &lt;a href="https://issues.apache.org/jira/projects/DUBBO/issues">JIRA Issues&lt;/a> 和修改信息都会推送到这个邮件列表。Dubbo 社区已经决定使用 GitHub Issues 代替 JIRA Issues,因此大部分 Issues 将由 GitHub Issues 进行跟踪。JIRA Issues 用于跟踪 ASF 相关问题。&lt;/li>
&lt;/ul>
&lt;h3 id="报告问题">报告问题&lt;/h3>
&lt;ul>
&lt;li>非安全问题直接在 GitHub Issue 中提出,另请参考 &lt;a href="https://github.com/apache/dubbo/blob/master/.github/ISSUE_TEMPLATE/dubbo-issue-report-template.md">Issue Template&lt;/a> 。&lt;/li>
&lt;li>安全问题请参考 &lt;a href="../reporting-security-issues_dev">“反馈漏洞”&lt;/a> 。&lt;/li>
&lt;/ul>
&lt;h3 id="贡献代码流程">贡献代码流程&lt;/h3>
&lt;p>此贡献流程适用于所有的 Apache Dubbo 社区内容,包括但不限于 dubbo(主干仓库)、dubbo-admin、dubbo-website。&lt;/p>
&lt;p>以下以贡献 dubbo (主干仓库) 为例,详细说明贡献流程。&lt;/p>
&lt;h4 id="1-fork-apachedubbo-项目到您的-github-帐号下">1. &lt;strong>Fork apache/dubbo 项目到您的 GitHub 帐号下&lt;/strong>&lt;/h4>
&lt;h4 id="2-克隆您-fork-的-dubbo-代码仓库到您本地">2. &lt;strong>克隆您 Fork 的 Dubbo 代码仓库到您本地&lt;/strong>&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>git clone &lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">your&lt;/span> fork dubbo repo address,for example:https://github.com/&lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">your&lt;/span> github id&lt;span style="color:#2aa198">}&lt;/span>/dubbo.git&lt;span style="color:#2aa198">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#b58900">cd&lt;/span> dubbo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="3-添加-apachedubbo-仓库为-upstream-仓库">3. &lt;strong>添加 apache/dubbo 仓库为 upstream 仓库&lt;/strong>&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>git remote add upstream https://github.com/apache/dubbo.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git remote -v
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> origin &lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">your&lt;/span> fork dubbo repo address&lt;span style="color:#2aa198">}&lt;/span> &lt;span style="color:#719e07">(&lt;/span>fetch&lt;span style="color:#719e07">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> origin &lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">your&lt;/span> fork dubbo repo address&lt;span style="color:#2aa198">}&lt;/span> &lt;span style="color:#719e07">(&lt;/span>push&lt;span style="color:#719e07">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> upstream https://github.com/apache/dubbo.git &lt;span style="color:#719e07">(&lt;/span>fetch&lt;span style="color:#719e07">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> upstream https://github.com/apache/dubbo.git &lt;span style="color:#719e07">(&lt;/span>push&lt;span style="color:#719e07">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git fetch origin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git fetch upstream
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="4-我们的工作以-issue-为驱动认领个-issue或者创建一个-issue-并描述清楚要做什么">4. &lt;strong>我们的工作以 Issue 为驱动,认领个 Issue,或者创建一个 Issue 并描述清楚要做什么。&lt;/strong>&lt;/h4>
&lt;p>新人推荐标记为: &lt;code>good first issue&lt;/code> 的 Issue&lt;/p>
&lt;h4 id="5-选择一个开发的基础分支通常是-master--30--31并基于此创建一个新的本地分支">5. &lt;strong>选择一个开发的基础分支,通常是 master / 3.0 / 3.1,并基于此创建一个新的本地分支&lt;/strong>&lt;/h4>
&lt;ul>
&lt;li>3.1 分支是 3.1 版本的开发分支&lt;/li>
&lt;li>3.0 分支是 3.0 版本的开发分支&lt;/li>
&lt;li>master 分支是 2.7 版本的开发分支&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># 从远程仓库创建分支到本地&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git checkout -b up-dev-issue#&lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">issue&lt;/span>-number&lt;span style="color:#2aa198">}&lt;/span> upstream/master
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>为了避免一些不必要的麻烦,我们推荐以 &amp;ldquo;upstream&amp;rdquo; 中的分支为基础创建新的本地分支。
可以以要做的事情的简单描述作为分支名(只要你能看懂就行),通常情况下我们会把 Issue 号包含到分支名中,例如上面的 checkout 命令中的。&lt;/p>
&lt;h4 id="6-在本地新建的开发分支上进行各种修改">6. &lt;strong>在本地新建的开发分支上进行各种修改&lt;/strong>&lt;/h4>
&lt;p>首先请保证您阅读并正确设置 Dubbo code style,相关内容请阅读 &lt;a href="#%E7%BC%96%E7%A0%81%E8%A7%84%E8%8C%83">编码规范&lt;/a> 。&lt;/p>
&lt;p>修改时请保证该本地分支上的修改仅和 Issue 相关,并尽量细化,做到一个分支只修改一件事,一个PR只修改一件事。&lt;/p>
&lt;p>可以在提交注释中添加 &amp;ldquo;#Issue号&amp;rdquo;,将该提交与 Issue 关联。&lt;/p>
&lt;h4 id="7-将您开发完成后的分支上传到您fork的仓库">7. &lt;strong>将您开发完成后的分支,上传到您fork的仓库&lt;/strong>&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>git push origin up-dev-issue#&lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">issue&lt;/span>-number&lt;span style="color:#2aa198">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="8-创建-pull-request">8. &lt;strong>创建 Pull Request&lt;/strong>&lt;/h4>
&lt;ul>
&lt;li>参考 &lt;a href="https://github.com/apache/dubbo/blob/master/PULL_REQUEST_TEMPLATE.md">Pull Request Template&lt;/a> 中的检查列表&lt;/li>
&lt;/ul>
&lt;p>Dubbo 社区将会 Review 您的 Pull Request,并可能提出修改意见,您可以根据修改意见回到步骤6进行修改,并使用步骤7进行重新提交。&lt;/p>
&lt;h4 id="9-如果没有问题dubbo-社区将会把您的修改合并恭喜您成为-dubbo-的贡献者">9. &lt;strong>如果没有问题,Dubbo 社区将会把您的修改合并,恭喜您成为 Dubbo 的贡献者。&lt;/strong>&lt;/h4>
&lt;h4 id="特别说明">特别说明:&lt;/h4>
&lt;ul>
&lt;li>开源项目一般都是以分支的方式工作,每件事情都创建一个分支。&lt;/li>
&lt;li>创建分支时,不要从本地仓库里的分支里创建,而是从指向主仓库的远程仓库创建。&lt;/li>
&lt;li>不要一直在同一个分支工作, 一个分支只做一件事情,不要在同一个分支做多件事情。&lt;/li>
&lt;li>一直在同一分支中修改,提交都会一直在该分支中。这样就会造成每次PR都会带着之前的所有被 merge、未被 merge 的提交。&lt;/li>
&lt;li>一件事情可以是一个 Issue,也可以是一个 Issue 中的部分 (Issue 太大可以拆解)。&lt;/li>
&lt;li>一个分支(一件事情)只提一个PR。&lt;/li>
&lt;li>提了 PR 后,如果 PR 有问题需要修改,可以继续在这个 PR 关联的分支修改提交。在 PR 被 merge 前,向这个分支继提交都会进入这个 PR。&lt;/li>
&lt;li>如果只是想纯更新代码,可以从主仓库提 PR 到你fork的仓库,源选择主仓库里的分支,目标选你 fork 的仓库的分支。&lt;/li>
&lt;li>这种方式更新代码,你 Fork 的仓库中会多一个提交。如果以你 Fork 的仓库中的分支为源创建分支, 这个提交纪录会被带过去并出现在PR中,所以要以主仓库的分支为源创建分支。&lt;/li>
&lt;li>Issue 认领: 在要认领的 Issue 中回复,明确表式你将处理这个 Issue。这样社区的 PMC 和 Committer 会把该 Issue assign 给你。当然认领前先看下这个 Issue 有没有被别人认领了。
为了方便,我们可以把认领的回复统一为: &lt;strong>@i will solve it@&lt;/strong>, 当然这不是必须的。&lt;/li>
&lt;/ul>
&lt;h4 id="编码规范">编码规范&lt;/h4>
&lt;p>请按照 &lt;a href="https://github.com/apache/dubbo/blob/master/CONTRIBUTING.md">CONTRIBUTING.md&lt;/a> 中的编码规范对自己的代码进行检查。&lt;/p>
&lt;h5 id="代码约定">&lt;strong>代码约定&lt;/strong>&lt;/h5>
&lt;p>我们的代码风格几乎和标准 Java 约定一致(流行IDE的默认设置满足这一点),主要有以下附加限制:&lt;/p>
&lt;ul>
&lt;li>如果当前行中有超过 120 个字符,则起一个新的行。&lt;/li>
&lt;li>确保所有新的 .java 文件都有一个简单的 JavaDoc 类注释,最好至少有一个关于该类的解释说明。&lt;/li>
&lt;li>将ASF许可注释添加到所有新的 .java 文件(从项目中的现有文件复制)&lt;/li>
&lt;li>请确保没有将 @author 标记添加到您所贡献的文件中,因为 Apache 不使用 @author 标记,其他方式(如 CVS、Git)将公平地记录所有您的贡献。&lt;/li>
&lt;li>为代码添加一些 JavaDoc,如果您更改命名空间,则需要一些 XSD DOC 元素。&lt;/li>
&lt;li>对于新的特征或重要的修复程序,应该添加单元测试。&lt;/li>
&lt;li>如果没有其他人使用您的分支,请将它与 master(或主项目中的其他目标分支)同步。&lt;/li>
&lt;li>当编写提交消息时,请遵循这些约定,如果您正在修复一个现有问题,请在提交消息的末尾添加 Fixes XXX(其中XXX是问题编号)。&lt;/li>
&lt;/ul>
&lt;h5 id="代码风格">&lt;strong>代码风格&lt;/strong>&lt;/h5>
&lt;p>我们提供了 IntelliJ idea 的模版文件 dubbo根目录/codestyle/dubbo_codestyle_for_idea.xml,您可以将它导入到IDE。
如果使用 Eclipse,可以通过参考该文件手动配置。&lt;/p>
&lt;p>&lt;strong>代码风格检查:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>安装 checkstyle 插件(IDEA可以在插件市场搜索)&lt;/li>
&lt;li>插件安装好后,在IDEA的settings==&amp;gt;tool==&amp;gt;checkstyle中设置:
&lt;img src="https://dubbo.apache.org/imgs/dev/checkstyle1.png" alt="checkstyle1">
&lt;img src="https://dubbo.apache.org/imgs/dev/checkstyle2.png" alt="checkstyle2">
&lt;img src="https://dubbo.apache.org/imgs/dev/checkstyle3.png" alt="checkstyle3">
&lt;img src="https://dubbo.apache.org/imgs/dev/checkstyle4.png" alt="checkstyle4">&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>注意事项&lt;/strong>&lt;/p>
&lt;p>使用 dubbo_codestyle_for_idea.xml 为你的 IDEA 设置代码格式是贡献代码前至关重要的一个步骤,否则你将会无法通过 CI 的代码风格校验,下面几个步骤给你演示了如何配置代码格式:&lt;/p>
&lt;ol>
&lt;li>进入菜单页 Editor &amp;gt; Code Style&lt;/li>
&lt;li>在 Code Style 页面的 scheme 菜单中点击 manage profiles 选项 在下拉列表中选择 Import Scheme, 接着选择 IntelliJ IDEA code style XML 导入 xml 文件&lt;/li>
&lt;li>输入你的格式名称,方便在不同工程之间进行识别,最后别忘了 ⏎ 来保存更改.
设置完成后,IDEA 会帮助你自动 reformat 代码&lt;/li>
&lt;/ol>
&lt;h3 id="参与发布投票">参与发布投票&lt;/h3>
&lt;p>参与发布投票是一种重要的贡献社区的方式,Dubbo 社区非常欢迎和鼓励任何人参与投票,每当一个版本需要正式发布的时候,会在开发者邮件列表上进行发布投票,只有当投票取得通过之后,才会正式发布,可以参考这个 &lt;a href="https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist">检查列表&lt;/a> 对源码进行合规性检查。如果有任何问题,可以在开发者邮件列表上提问。&lt;/p></description></item><item><title>Contact: 邮件列表订阅向导</title><link>https://dubbo.apache.org/zh-cn/contact/contributor/mailing-list-subscription-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/contact/contributor/mailing-list-subscription-guide_dev/</guid><description>
&lt;p>Apache incubator 的 Dubbo 开发者邮件列表(dev@dubbo.apache.org)已经建立,请随时订阅并参考[^1]获取更多细节。&lt;/p>
&lt;p>你也可以直接查看&lt;a href="https://lists.apache.org/list.html?dev@dubbo.apache.org">历史邮件&lt;/a>&lt;/p>
&lt;p>下面是一个关于 Dubbo 邮件列表订阅的简短指南:&lt;/p>
&lt;ol>
&lt;li>发一封邮件到 &lt;a href="mailto:dev-subscribe@dubbo.apache.org">dev-subscribe@dubbo.apache.org&lt;/a>,其内容和标题均可为空。随后,您会收到一封邮件,其内容如下:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>from: dev-help@dubbo.apache.org
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>reply-to: dev-sc.xxxxxxx.xxxxxxxx-hello=example.com@dubbo.apache.org
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>to: hello@example.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>date: Sat, Feb 24, 2018 at 3:12 PM
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>subject: confirm subscribe to dev@dubbo.apache.org
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mailed-by: apache.org
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Hi! This is the ezmlm program. I&amp;#39;m managing the
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dev@dubbo.apache.org mailing list.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>I&amp;#39;m working for my owner, who can be reached
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>at dev-owner@dubbo.apache.org.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>To confirm that you would like
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> hello@example.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>added to the dev mailing list, please send
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>a short reply to this address:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> dev-sc.xxxxxxx.xxxxxxxx-hello=example.com@dubbo.apache.org
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Usually, this happens when you just hit the &amp;#34;reply&amp;#34; button.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>If this does not work, simply copy the address and paste it into
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>the &amp;#34;To:&amp;#34; field of a new message.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>or click here:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> mailto:dev-sc.xxxxxxx.xxxxxxxx-hello=example.com@dubbo.apache.org
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>直接回复邮件,其内容和标题仍然可以为空,随后,您将再次收到一封邮件,其内容如下:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>from: dev-help@dubbo.apache.org
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>to: hello@example.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>date: Sat, Feb 24, 2018 at 3:14 PM
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>subject: WELCOME to dev@dubbo.apache.org
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mailed-by: apache.org
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Hi! This is the ezmlm program. I&amp;#39;m managing the
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dev@dubbo.apache.org mailing list.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>I&amp;#39;m working for my owner, who can be reached
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>at dev-owner@dubbo.apache.org.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Acknowledgment: I have added the address
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> hello@example.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>to the dev mailing list.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Welcome to dev@dubbo.apache.org!
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Please save this message so that you know the address you are
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>subscribed under, in case you later want to unsubscribe or change your
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>subscription address.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>
&lt;p>到此,邮件列表订阅完毕,从现在开始,您将收到很多发送到该邮件列表的邮件,如果您有更多的问题,只需发送邮件到dev@dubbo.apache.org,就会有人回答您的问题。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>如果您想取消订阅,只需发送一封邮件到dev-unsubscribe@dubbo.apache.org,收到回复后,请按其指定步骤执行。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>请注意:dev@dubbo.apache.org是有效的。dev@dubbo.incubator.apache.org已经不再使用。&lt;/p>
&lt;/blockquote>
&lt;p>[^1] &lt;a href="https://apache.org/foundation/mailinglists.html#subscribing">https://apache.org/foundation/mailinglists.html#subscribing&lt;/a>&lt;/p></description></item><item><title>Contact: 报告安全问题</title><link>https://dubbo.apache.org/zh-cn/contact/contributor/reporting-security-issues_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/contact/contributor/reporting-security-issues_dev/</guid><description>
&lt;p>Apache Software Foundation 在消除其软件项目中的安全性问题方面采取严格的立场。Apache Dubbo 对与其功能和特性有关的问题非常敏感并很快提出。&lt;/p>
&lt;h2 id="报告漏洞">报告漏洞&lt;/h2>
&lt;p>如果您对 Dubbo 的安全性有担心,或者发现漏洞或潜在威胁,请发送电子邮件至 &lt;a href="mailto:security@dubbo.apache.org">security@dubbo.apache.org&lt;/a> 与 Apache Dubbo 安全团队联系。在邮件中,指定问题或潜在威胁的描述。还敦促您推荐重现和复制问题的方法。Dubbo 社区会在评估和分析调查结果之后与您联系。&lt;/p>
&lt;p>请先注意在安全电子邮件中报告安全问题,然后再在公共领域公开该问题。&lt;/p>
&lt;h2 id="漏洞处理">漏洞处理&lt;/h2>
&lt;p>漏洞处理过程的概述是:&lt;/p>
&lt;ul>
&lt;li>报告者将漏洞秘密报告给 Apache。&lt;/li>
&lt;li>相应项目的安全团队与报告者私下合作来解决漏洞。&lt;/li>
&lt;li>制作了包含该修复程序的有关 Apache 产品的新版本。&lt;/li>
&lt;li>该漏洞已公开宣布。&lt;/li>
&lt;/ul>
&lt;p>有关此过程的详细说明,请参见&lt;a href="https://www.apache.org/security/committers.html">此处&lt;/a>&lt;/p></description></item><item><title>Contact: 软件捐献向导</title><link>https://dubbo.apache.org/zh-cn/contact/contributor/software-donation-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/contact/contributor/software-donation-guide_dev/</guid><description>
&lt;p>在您阅读这篇指南之前,请确保您已经向PMC确认了实际需要的 SGA。&lt;/p>
&lt;p>如果您向 Apache Dubbo 捐赠了大量的代码或文档,则需要在合并代码或者文档之前签署&lt;a href="https://www.apache.org/licenses/#grants">软件授权书&lt;/a>。&lt;/p>
&lt;h3 id="操作步骤">操作步骤&lt;/h3>
&lt;ol>
&lt;li>下载这篇&lt;a href="https://www.apache.org/licenses/software-grant-template.pdf">pdf文档&lt;/a>&lt;/li>
&lt;li>打印下载好的文档&lt;/li>
&lt;li>按要求填充表格(请看下边示例)&lt;/li>
&lt;li>请您的领导在上边签字&lt;/li>
&lt;li>扫描&lt;/li>
&lt;li>将扫描好的文档以邮件的方式发送给secretary@apache.org,并抄送给private@dubbo.apache.org&lt;/li>
&lt;/ol>
&lt;h3 id="示例">示例&lt;/h3>
&lt;p>下边是一个文本示例,原始文本可以在&lt;a href="https://www.apache.org/licenses/software-grant.txt">这里&lt;/a>找到&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>License Agreement
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> This License Agreement is entered into as of the _12th_ day of
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>___April____, __2018__ by ___ABC Software Co., Ltd.____ (&amp;#34;Licensor&amp;#34;),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>in favor of The Apache Software Foundation, a Delaware nonstock
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>membership corporation (the &amp;#34;Foundation&amp;#34;).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> WHEREAS, Licensor owns or has sufficient rights to contribute the
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>software source code and other related intellectual property as
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>itemized on Exhibit A (&amp;#34;Software&amp;#34;) under the terms of this agreement
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>to the Foundation for use within Foundation software development
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>projects (&amp;#34;Projects&amp;#34;).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> NOW, THEREFORE, FOR GOOD AND VALUABLE CONSIDERATION, the receipt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>and legal sufficiency of which are hereby acknowledged, the parties
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hereto, intending to be legally bound, agree as follows:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>1. Subject to the terms and conditions of this License, Licensor
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hereby grants to the Foundation:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> a) a non-exclusive, worldwide, royalty-free, irrevocable
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> copyright license to reproduce, prepare derivative works of,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> publicly display, publicly perform, distribute and sublicense,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> internally and externally, the Software and such derivative
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> works, in source code and object code form; and,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> b) a non-exclusive, worldwide, royalty-free, irrevocable
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> patent license under Licensed Patents to make, use, sell,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> offer to sell, import and otherwise transfer the Software
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> in source code and object code form. &amp;#34;Licensed Patents&amp;#34; mean
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> patent claims owned by Licensor which are necessarily
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> infringed by the use or sale of the Software alone.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2. Licensor represents that, to Licensor&amp;#39;s knowledge, Licensor is
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>legally entitled to grant the above license. Licensor agrees to notify
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>the Foundation of any facts or circumstances of which Licensor becomes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aware and which makes or would make Licensor&amp;#39;s representations in this
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>License Agreement inaccurate in any respect.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>3. This Software is provided AS-IS, WITHOUT WARRANTIES OR CONDITIONS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>OR FITNESS FOR A PARTICULAR PURPOSE. NEITHER THE LICENSOR NOR ITS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>SUPPLIERS WILL BE LIABLE TO THE FOUNDATION OR ITS LICENSEES FOR ANY
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>THE USE OR DISTRIBUTION OF THE WORK OR THE EXERCISE OF ANY RIGHTS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>This License Agreement is the entire agreement of the parties
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>with respect to its subject matter, and may only be amended by a
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>writing signed by each party. This License Agreement may be
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>executed in one or more counterparts, each of which shall be
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>considered an original.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> IN WITNESS WHEREOF, Licensor has executed this License Agreement
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>as of the date first written above.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> LICENSOR:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Signed By: _____________________________________ &amp;lt;--- Your boss&amp;#39;s sign here
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Print Name: _____Lei Li_________________________ &amp;lt;--- Your boss&amp;#39;s name here
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Title: ____Director_____________________________ &amp;lt;--- Your boss&amp;#39;s title here
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Representing: ____ABC Software Co., Ltd. _______
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ________________________________________________
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Contact Name: ____Lei Li________________________ &amp;lt;--- Your boss&amp;#39;s name here
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Contact Email: ____lilei@abc.com________________ &amp;lt;--- Your boss&amp;#39;s email here
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Exhibit A
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>List of software and other intellectual property covered by this agreement:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* Github address where your code is hosted
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* Pull request link
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Contact: 扩展 Dubbo 向导</title><link>https://dubbo.apache.org/zh-cn/contact/contributor/dubbo-extension-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/contact/contributor/dubbo-extension-guide_dev/</guid><description>
&lt;p>Dubbo 使用微内核+插件的设计模式。内核只负责组装插件,Dubbo 的功能都是由扩展点(插件)实现,这就意味着 Dubbo 的所有功能都可以被用户定制的扩展所替代。&lt;/p>
&lt;h3 id="dubbo-生态系统">Dubbo 生态系统&lt;/h3>
&lt;p>我们建议您将扩展加入到 Dubbo 生态系统。使用这种模式,可以使 Dubbo 的核心仓库更干净,并且可以减少维护工作。更少的代码也可以提高核心仓库的构建速度。&lt;/p>
&lt;h3 id="依赖">依赖&lt;/h3>
&lt;p>要实现您自己的 Dubbo 扩展,通常只需依赖 API jar 就可以满足您的需求。例如:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dependency&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;groupId&amp;gt;&lt;/span>org.apache.dubbo&lt;span style="color:#268bd2">&amp;lt;/groupId&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;artifactId&amp;gt;&lt;/span>dubbo-serialization-api&lt;span style="color:#268bd2">&amp;lt;/artifactId&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;version&amp;gt;&lt;/span>${dubbo.version}&lt;span style="color:#268bd2">&amp;lt;/version&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/dependency&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="src指导">Src指导&lt;/h3>
&lt;p>通常,要实现特殊的扩展,只需要参考&lt;a href="../new-contributor-guide_dev">开发者指南&lt;/a>,实现Dubbo必要的接口和合适的扩展即可。除此之外,还有一些其它的事项需要注意:&lt;/p>
&lt;ol>
&lt;li>良好的测试,您需要编写单元测试和冒烟测试以消除潜在的 bug。&lt;/li>
&lt;li>没有警告,如有不可避免的警告,请使用 @SuppressWarnings 阻止它,但是请不要乱用。&lt;/li>
&lt;li>README。添加必要的自述以说明如何使用扩展,以及需要注意的事项。&lt;/li>
&lt;li>许可证:请确保使用Apache License 2.0。&lt;/li>
&lt;/ol>
&lt;h3 id="通知社区">通知社区&lt;/h3>
&lt;ol>
&lt;li>提交您的代码到 &lt;a href="https://github.com">github&lt;/a>。&lt;/li>
&lt;li>加入邮件列表(建议)。点击&lt;a href="https://github.com/apache/dubbo/wiki/Mailing-list-subscription-guide">这里&lt;/a>查看如何加入邮件列表。&lt;/li>
&lt;li>发送一封邮件到 &lt;a href="mailto:dev@incubator.dubbo.apache.org">dev@incubator.dubbo.apache.org&lt;/a> 通知社区。&lt;/li>
&lt;li>通常,发送邮件之后,社区会对您的扩展进行讨论,dubbo 组的管理员会联系您转移您的项目到 dubbo 生态系统。&lt;/li>
&lt;/ol>
&lt;h3 id="转移项目到dubbo生态系统">转移项目到dubbo生态系统&lt;/h3>
&lt;ol>
&lt;li>dubbo 组的管理员会请您将您的项目的所有者转让给 dubbo。&lt;/li>
&lt;li>dubbo 组的管理员会在 dubbo 组下新建一个项目并邀请您加入到这个项目。&lt;/li>
&lt;li>一旦您接受邀请,您可以将您的项目转移到 dubbo 组下的新项目里。&lt;/li>
&lt;li>dubbo 组的成员会对您的项目进行代码审查。随后,您可以对这些代码进行改进。&lt;/li>
&lt;/ol></description></item><item><title>Contact: 测试覆盖率向导</title><link>https://dubbo.apache.org/zh-cn/contact/contributor/test-coverage-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/contact/contributor/test-coverage-guide_dev/</guid><description>
&lt;h3 id="写单元测试的收益">写单元测试的收益&lt;/h3>
&lt;ul>
&lt;li>单元测试能帮助每个人深入代码细节,了解代码的功能。&lt;/li>
&lt;li>通过测试用例我们能发现bug,并提交代码的健壮性。&lt;/li>
&lt;li>测试用例同时也是代码的demo用法。&lt;/li>
&lt;/ul>
&lt;h3 id="单元测试用例的一些设计原则">单元测试用例的一些设计原则&lt;/h3>
&lt;ul>
&lt;li>应该精心设计好步骤,颗粒度和组合条件。&lt;/li>
&lt;li>注意边界条件。&lt;/li>
&lt;li>单元测试也应该好好设计,不要写无用的代码。&lt;/li>
&lt;li>当你发现一个&lt;code>方法&lt;/code>很难写单元测试时,如果可以确认这个&lt;code>方法&lt;/code>是&lt;code>臭代码&lt;/code>,那么就和开发者一起重构它。&lt;/li>
&lt;li>Dubbo中用的mock框架是: &lt;a href="http://site.mockito.org/">mockito&lt;/a>. 下面是一些开发向导:&lt;a href="https://www.baeldung.com/bdd-mockito">mockito tutorial&lt;/a>,&lt;a href="https://dzone.com/refcardz/mockito">mockito refcard&lt;/a>&lt;/li>
&lt;li>TDD(可选):当你开始写一个新的功能时,你可以试着先写测试用例。&lt;/li>
&lt;/ul>
&lt;h3 id="测试覆盖率设定值">测试覆盖率设定值&lt;/h3>
&lt;ul>
&lt;li>在现阶段,Delta更改代码的测试覆盖设定值为:&amp;gt;=60%,越高越好。&lt;/li>
&lt;li>我们可以在这个页面中看到测试报告: &lt;a href="https://codecov.io/gh/apache/dubbo">https://codecov.io/gh/apache/dubbo&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>