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