blob: 902b7945363da37929c14d2ca1c9370aec9fa3c9 [file] [log] [blame]
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – Committer Guidelines</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/</link><description>Recent content in Committer Guidelines on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://dubbo.apache.org/en/latest/contribution-guidelines/committer/index.xml" rel="self" type="application/rss+xml"/><item><title>Latest: Apache 提交者注册流程</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/new-committer-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/new-committer-guide_dev/</guid><description>
&lt;h2 id="一apache-提交者的产生">一、Apache 提交者的产生&lt;/h2>
&lt;h3 id="项目孵化初始化提交者">项目孵化初始化提交者&lt;/h3>
&lt;p>项目孵化阶段,在孵化项目提案中,会有初始化提交者列表这一选项。确认你是初始化提交者的一员。项目在 apache 孵化器社区投票通过后,提交者可以开始准备注册账户了。可以参看&lt;a href="https://wiki.apache.org/incubator/">孵化器 wiki&lt;/a>&lt;/p>
&lt;h3 id="活跃的贡献者被选举为提交者">活跃的贡献者被选举为提交者&lt;/h3>
&lt;p>在后期的开发过程中,活跃的贡献者可以被选举为提交者。见&lt;a href="https://www.apache.org/dev/new-committers-guide.html#becoming-a-committer">如何成为 committer&lt;/a>&lt;/p>
&lt;h2 id="二个人开发者提交-icla">二、个人开发者提交 ICLA&lt;/h2>
&lt;h3 id="1选择-apache-id">1、选择 apache id&lt;/h3>
&lt;p>在&lt;a href="http://people.apache.org/committer-index.html"> apache 提交者列表页&lt;/a>查看已经注册过的 apache id,&lt;/p>
&lt;h3 id="2个人提交者授权协议icla">2、个人提交者授权协议(ICLA):&lt;/h3>
&lt;p>下载&lt;a href="https://www.apache.org/licenses/icla.pdf"> ICLA 模板&lt;/a>,查找可用的 id。将 icla.pdf 个人信息填写正确后打印,签名、扫描、并当做附件发送邮件给秘书 &lt;a href="mailto:secretary@apache.org">secretary@apache.org&lt;/a>,秘书会帮忙创建 apache 用户 id。同时会创建一个 &lt;a href="mailto:your_id@apache.org">your_id@apache.org&lt;/a> 的邮箱,可以在&lt;a href="http://people.apache.org/committer-index.html"> apache 提交者列表页&lt;/a>查看查找用户是否已经创建。&lt;/p>
&lt;h3 id="3导师帮助提交用户id创建请求">3、导师帮助提交用户id创建请求&lt;/h3>
&lt;p>导师将帮助提交 apache 账户创建请求给 root 邮件组,会有人帮助建立 id。一般需要2天时间账户会建立,请等待并在&lt;a href="http://people.apache.org/committer-index.html"> apache 提交者列表页&lt;/a>查看查找用户是否已经创建。&lt;/p>
&lt;h2 id="三加入apache开发者组">三、加入apache开发者组&lt;/h2>
&lt;ol>
&lt;li>登陆 &lt;a href="https://id.apache.org/">Apache 账户工具&lt;/a>,在登陆页面点击&amp;quot;忘记密码&amp;quot;设置始化密码,会有一封密码重置邮件发送到 forward 邮箱(在孵化项目提案中提交的开发者邮件)&lt;/li>
&lt;li>关于 apache 邮箱:apache.org 邮箱并没有自己的邮件内容存储服务器。它需要借用其他邮件提供商的邮件内容存储、分发功能。在很多投票环节是建议使用 apache 邮箱的。
这里就有一个问题,怎么在其它邮箱里面配置 apache.org 邮箱转发功能:
&lt;ul>
&lt;li>收件箱:收取发送到 apache.org 的邮件。这个在第一步配置好 Apache 账户工具的 forward 邮箱就可以用 forward 邮箱收取邮件了&lt;/li>
&lt;li>发件箱:将发出的邮件显示发件邮箱为 apache.org 邮箱。请参考:&lt;a href="https://reference.apache.org/committer/email">设置 apache 邮箱指南&lt;/a>和&lt;a href="https://support.google.com/mail/answer/22370"> gmail 邮箱设置方式&lt;/a>。 其他邮箱服务的设置方式不方便找到,gmail 的最方便,建议换成 gmail 邮箱(不是广告)。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>修改编辑页面的 homepage url,&lt;a href="http://people.apache.org/committer-index.html">apache 提交者列表页&lt;/a>中你的账户能加主页链接。&lt;/li>
&lt;li>修改编辑页面的 github 账户(username),提交确认后两个小时内会有邮件邀请你加入 github.com/apache-committers 组。这期间可以阅读&lt;a href="http://www.apache.org/foundation/how-it-works.html#developers"> ASF 工作方式&lt;/a>以对 ASF 开发做一些基本了解。&lt;/li>
&lt;/ol>
&lt;h2 id="四提交者获得对项目的写权限">四、提交者获得对项目的写权限&lt;/h2>
&lt;p>&lt;a href="https://gitbox.apache.org/setup/">GitBox 账户链接工具&lt;/a>的操作&lt;/p>
&lt;h3 id="apache账户授权">Apache账户授权&lt;/h3>
&lt;p>按照提示授权对 Apache 账户的 OAuth 协议登入&lt;/p>
&lt;h3 id="github账户授权">Github账户授权&lt;/h3>
&lt;p>按照提示授权对 github 账户的 OAuth 协议登入&lt;/p>
&lt;h3 id="在-githubcom-设置-github-账户两因素授权2fa">在 github.com 设置 github 账户两因素授权(2FA)&lt;/h3>
&lt;p>按照&lt;a href="https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication">授权 GitHub 2FA wiki&lt;/a> 操作如下:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>在手机安装 “google 身份验证器” app&lt;/p>
&lt;/li>
&lt;li>
&lt;p>按照&lt;a href="https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication">授权 GitHub 2FA wiki&lt;/a> 一步一步操作。&lt;/p>
&lt;p>在&lt;a href="https://github.com/settings/security">两因素授权验证&lt;/a>界面,不建议选择用手机扫描二维码,因为有些手机会扫描不出来。
请打开手机 “google 身份验证器” app,点“+”选择“输入提供的秘钥”: 在“账户名” input 框写入 github 账户。在“您的秘钥” input 框写入:打开的网页中 &amp;ldquo;enter this text code&amp;rdquo; 链接里面的文本。在 app 中点击&amp;quot;添加&amp;quot; 后,将为此账户生成6位数字动态。将此6位数字写入网页中的文本框,然后点 “Enable”。这样 2FA 就设置成功了。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>退出并重新登陆 github,输入用户名、密码后会多一步动态密码的填写,该动态密码就是 google 身份验证器上面的动态密码&lt;/p>
&lt;/li>
&lt;li>
&lt;p>大概需要半个小时,会有邮件通知你已经加入了 xx project-committers 开发者组。你也可以进入 &lt;a href="https://github.com/orgs/apache/teams">apache teams&lt;/a> 页面查看。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>2FA 提交后,你已经 clone 的项目会有权限校验问题,解决方法为下面二选一:&lt;/p>
&lt;ul>
&lt;li>申请 Access Token:
在 github 上生成 access token 后,指令行需要密码的地方就粘贴token。
参考官网&lt;a href="https://docs.github.com/cn/repositories/creating-and-managing-repositories/troubleshooting-cloning-errors#provide-access-token-if-2fa-enabled">帮助链接一&lt;/a>和&lt;a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token">帮助链接二&lt;/a>&lt;/li>
&lt;li>改用 ssh:
在命令行执行 ssh-keygen 命令, 然后把pub文件中的内容粘贴到 github 上&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>注意:一定要保证 github 的 2FA 为 &amp;ldquo;enable&amp;rdquo; 状态。当你将 2FA 设置为 &amp;ldquo;off&amp;rdquo; 时候,将会被对应的 apache committer 写权限组除名,直到你再次设置成功为止。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="五其他">五、其他&lt;/h2>
&lt;h3 id="the-apache-way">The Apache Way&lt;/h3>
&lt;p>详情请参考 &lt;a href="http://apache.org/foundation/governance/">wiki&lt;/a>&lt;/p>
&lt;p>社区重于代码,如果某问题或者方案没有在社区(邮件列表)讨论过,就当没有发生过&lt;/p>
&lt;h3 id="小福利">小福利&lt;/h3>
&lt;p>Jetbrains 给 apache 提交者一个小福利,就是可以免费使用 idea 的全产品系列。具体注册地址为:https://www.jetbrains.com/shop/eform/apache?product=ALL&lt;/p>
&lt;h3 id="相关-wiki">相关 wiki&lt;/h3>
&lt;p>&lt;a href="https://www.apache.org/dev/new-committers-guide.html">https://www.apache.org/dev/new-committers-guide.html&lt;/a>&lt;/p></description></item><item><title>Latest: 如何准备 Apache Release</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/release-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/release-guide_dev/</guid><description>
&lt;h2 id="理解-apache-发布的内容和流程">理解 Apache 发布的内容和流程&lt;/h2>
&lt;p>总的来说,Source Release 是 Apache 关注的重点,也是发布的必须内容;而 Binary Release 是可选项,Dubbo 可以选择是否发布二进制包到 Apache 仓库或者发布到 Maven 中央仓库。&lt;/p>
&lt;p>请参考以下链接,找到更多关于 ASF 的发布指南:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://www.apache.org/dev/release-publishing">Apache Release Guide&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.apache.org/dev/release.html">Apache Release Policy&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.apache.org/dev/publishing-maven-artifacts.html">Maven Release Info&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="本地构建环境准备">本地构建环境准备&lt;/h2>
&lt;p>主要包括签名工具、Maven 仓库认证相关准备&lt;/p>
&lt;h3 id="安装gpg">安装GPG&lt;/h3>
&lt;p>详细文档请参见&lt;a href="https://www.gnupg.org/download/index.html">这里&lt;/a>, Mac OS 下配置如下&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-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>$ brew install gpg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ gpg --version &lt;span style="color:#586e75">#检查版本,应该为2.x&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="用gpg生成key">用gpg生成key&lt;/h3>
&lt;p>根据提示,生成 key&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ gpg --full-gen-key
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpg &lt;span style="color:#719e07">(&lt;/span>GnuPG&lt;span style="color:#719e07">)&lt;/span> 2.0.12; Copyright &lt;span style="color:#719e07">(&lt;/span>C&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:#2aa198">2009&lt;/span> Free Software Foundation, Inc.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>This is free software: you are free to change and redistribute it.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>There is NO WARRANTY, to the extent permitted by law.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Please &lt;span style="color:#719e07">select&lt;/span> what kind of key you want:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">(&lt;/span>1&lt;span style="color:#719e07">)&lt;/span> RSA and RSA &lt;span style="color:#719e07">(&lt;/span>default&lt;span style="color:#719e07">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">(&lt;/span>2&lt;span style="color:#719e07">)&lt;/span> DSA and Elgamal
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">(&lt;/span>3&lt;span style="color:#719e07">)&lt;/span> DSA &lt;span style="color:#719e07">(&lt;/span>sign only&lt;span style="color:#719e07">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">(&lt;/span>4&lt;span style="color:#719e07">)&lt;/span> RSA &lt;span style="color:#719e07">(&lt;/span>sign only&lt;span style="color:#719e07">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Your selection? &lt;span style="color:#2aa198">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RSA keys may be between &lt;span style="color:#2aa198">1024&lt;/span> and &lt;span style="color:#2aa198">4096&lt;/span> bits long.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>What keysize &lt;span style="color:#719e07">do&lt;/span> you want? &lt;span style="color:#719e07">(&lt;/span>2048&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:#2aa198">4096&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Requested keysize is &lt;span style="color:#2aa198">4096&lt;/span> bits
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Please specify how long the key should be valid.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">0&lt;/span> &lt;span style="color:#719e07">=&lt;/span> key does not expire
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;n&amp;gt; &lt;span style="color:#719e07">=&lt;/span> key expires in n days
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;n&amp;gt;w &lt;span style="color:#719e07">=&lt;/span> key expires in n weeks
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;n&amp;gt;m &lt;span style="color:#719e07">=&lt;/span> key expires in n months
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;n&amp;gt;y &lt;span style="color:#719e07">=&lt;/span> key expires in n years
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Key is valid &lt;span style="color:#719e07">for&lt;/span>? &lt;span style="color:#719e07">(&lt;/span>0&lt;span style="color:#719e07">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Key does not expire at all
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Is this correct? &lt;span style="color:#719e07">(&lt;/span>y/N&lt;span style="color:#719e07">)&lt;/span> y
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GnuPG needs to construct a user ID to identify your key.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Real name: Robert Burrell Donkin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Email address: rdonkin@apache.org
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Comment: CODE SIGNING KEY
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>You selected this USER-ID:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#2aa198">&amp;#34;Robert Burrell Donkin (CODE SIGNING KEY) &amp;lt;rdonkin@apache.org&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Change &lt;span style="color:#719e07">(&lt;/span>N&lt;span style="color:#719e07">)&lt;/span>ame, &lt;span style="color:#719e07">(&lt;/span>C&lt;span style="color:#719e07">)&lt;/span>omment, &lt;span style="color:#719e07">(&lt;/span>E&lt;span style="color:#719e07">)&lt;/span>mail or &lt;span style="color:#719e07">(&lt;/span>O&lt;span style="color:#719e07">)&lt;/span>kay/&lt;span style="color:#719e07">(&lt;/span>Q&lt;span style="color:#719e07">)&lt;/span>uit? O
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>You need a Passphrase to protect your secret key. &lt;span style="color:#586e75"># 填入密码,以后打包过程中会经常用到&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="查看-key-id">查看 key id&lt;/h3>
&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-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>$ gpg --list-keys
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pub rsa4096/28681CB1 2018-04-26 &lt;span style="color:#586e75"># 28681CB1就是key id&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>uid &lt;span style="color:#719e07">[&lt;/span>ultimate&lt;span style="color:#719e07">]&lt;/span> liujun &lt;span style="color:#719e07">(&lt;/span>apache-dubbo&lt;span style="color:#719e07">)&lt;/span> &amp;lt;liujun@apache.org&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sub rsa4096/D3D6984B 2018-04-26
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># 通过key id发送public key到keyserver&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ gpg --keyserver pgpkeys.mit.edu --send-key 28681CB1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># 其中,pgpkeys.mit.edu为随意挑选的keyserver,keyserver列表为:https://sks-keyservers.net/status/,为相互之间是自动同步的,选任意一个都可以。&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果有多个 public key,设置默认 key。修改&lt;code>~/.gnupg/gpg.conf&lt;/code>&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-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># If you have more than 1 secret key in your keyring, you may want to&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># uncomment the following option and set your preferred keyid.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>default-key 28681CB1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果有多个 public key, 也可以删除无用的 key:&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-sh" data-lang="sh">&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>$ gpg --yes --delete-secret-keys shenglicao2@gmail.com &lt;span style="color:#586e75">###老的私钥,指明邮箱即可&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ gpg --delete-keys 1808C6444C781C0AEA0AAD4C4D6A8007D20DB8A4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>PS: 最新版本经过实测,本地没有gpg.conf这个文件,因此如果在执行过程中遇到签名失败,可以参考这个文章:https://blog.csdn.net/wenbo20182/article/details/72850810 或 &lt;a href="https://d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors">https://d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>由于公钥服务器没有检查机制,任何人都可以用你的名义上传公钥,所以没有办法保证服务器上的公钥的可靠性。
通常,你可以在网站上公布一个公钥指纹,让其他人核对下载到的公钥是否为真。&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-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># fingerprint参数生成公钥指纹:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ gpg --fingerprint liujun
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pub rsa4096 2019-10-17 &lt;span style="color:#719e07">[&lt;/span>SC&lt;span style="color:#719e07">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#2aa198">1376&lt;/span> A2FF 67E4 C477 &lt;span style="color:#2aa198">5739&lt;/span> 09BD 7DB6 &lt;span style="color:#2aa198">8550&lt;/span> D366 E4C0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>uid &lt;span style="color:#719e07">[&lt;/span>ultimate&lt;span style="color:#719e07">]&lt;/span> liujun &lt;span style="color:#719e07">(&lt;/span>CODE SIGNING KEY&lt;span style="color:#719e07">)&lt;/span> &amp;lt;liujun@apache.org&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sub rsa4096 2019-10-17 &lt;span style="color:#719e07">[&lt;/span>E&lt;span style="color:#719e07">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>登录 &lt;a href="https://id.apache.org">https://id.apache.org&lt;/a>, 将上面的 fingerprint (即 1376 A2FF 67E4 C477 5739 09BD 7DB6 8550 D366 E4C0)
粘贴到自己的用户信息中 OpenPGP Public Key Primary Fingerprint&lt;/p>
&lt;h3 id="设置-apache-中央仓库">设置 Apache 中央仓库&lt;/h3>
&lt;p>Dubbo 项目的父 pom 为 Apache pom(2.7.0 以上版本需要,2.6.x 发布版本不需要此操作)&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;parent&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&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>apache&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>19&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;/parent&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>添加以下内容到 .m2/settings.xml
所有密码请使用 &lt;a href="http://maven.apache.org/guides/mini/guide-encryption.html">maven-encryption-plugin&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-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;settings&amp;gt;&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 style="color:#268bd2">&amp;lt;servers&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">&amp;lt;!-- To publish a snapshot of some part of Maven --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;id&amp;gt;&lt;/span>apache.snapshots.https&lt;span style="color:#268bd2">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;username&amp;gt;&lt;/span> &lt;span style="color:#586e75">&amp;lt;!-- YOUR APACHE LDAP USERNAME --&amp;gt;&lt;/span> &lt;span style="color:#268bd2">&amp;lt;/username&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;password&amp;gt;&lt;/span> &lt;span style="color:#586e75">&amp;lt;!-- YOUR APACHE LDAP PASSWORD (encrypted) --&amp;gt;&lt;/span> &lt;span style="color:#268bd2">&amp;lt;/password&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;/server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">&amp;lt;!-- To stage a release of some part of Maven --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;id&amp;gt;&lt;/span>apache.releases.https&lt;span style="color:#268bd2">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;username&amp;gt;&lt;/span> &lt;span style="color:#586e75">&amp;lt;!-- YOUR APACHE LDAP USERNAME --&amp;gt;&lt;/span> &lt;span style="color:#268bd2">&amp;lt;/username&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;password&amp;gt;&lt;/span> &lt;span style="color:#586e75">&amp;lt;!-- YOUR APACHE LDAP PASSWORD (encrypted) --&amp;gt;&lt;/span> &lt;span style="color:#268bd2">&amp;lt;/password&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;/server&amp;gt;&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 style="color:#586e75">&amp;lt;!-- gpg passphrase used when generate key --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;id&amp;gt;&lt;/span>gpg.passphrase&lt;span style="color:#268bd2">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;passphrase&amp;gt;&lt;/span>&lt;span style="color:#586e75">&amp;lt;!-- yourKeyPassword --&amp;gt;&lt;/span>&lt;span style="color:#268bd2">&amp;lt;/passphrase&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;/server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;/servers&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/settings&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="打包上传">打包&amp;amp;上传&lt;/h2>
&lt;h3 id="准备分支">准备分支&lt;/h3>
&lt;p>从主干分支拉取新分支作为发布分支,如现在要发布$&lt;code>{release_version}&lt;/code>版本,则从2.6.x拉出新分支&lt;code>${release_version}-release&lt;/code>,此后&lt;code>${release_version}&lt;/code> Release Candidates涉及的修改及打标签等都在&lt;code>${release_version}-release&lt;/code>分支进行,最终发布完成后合入主干分支。&lt;/p>
&lt;h3 id="编译打包">编译打包&lt;/h3>
&lt;p>首先,在&lt;code>${release_version}-release&lt;/code>分支验证maven组件打包、source源码打包、签名等是否都正常工作。&lt;strong>2.6.x记得要使用1.6进行编译打包&lt;/strong>&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ mvn clean install -Prelease
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ mvn deploy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>上述命令将snapshot包推送到maven中央仓库&lt;/p>
&lt;h3 id="用maven-release-plugin发布-废弃参考后一步">&lt;del>用maven-release-plugin发布&lt;/del> (&lt;code>废弃&lt;/code>,参考后一步)&lt;/h3>
&lt;p>&lt;del>先用dryRun验证是否ok&lt;/del>&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ mvn release:prepare -Prelease -Darguments&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">&amp;#34;-DskipTests&amp;#34;&lt;/span> -DautoVersionSubmodules&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#b58900">true&lt;/span> -Dusername&lt;span style="color:#719e07">=&lt;/span>YOUR GITHUB ID-DdryRun&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#b58900">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;del>验证通过后,执行release:prepare&lt;/del>&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ mvn release:clean
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ mvn release:prepare -Prelease -Darguments&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">&amp;#34;-DskipTests&amp;#34;&lt;/span> -DautoVersionSubmodules&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#b58900">true&lt;/span> -Dusername&lt;span style="color:#719e07">=&lt;/span>YOUR GITHUB ID -DpushChanges&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#b58900">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>执行release插件时,如果指定了&lt;code>-DpushChanges=true&lt;/code>, 插件会自动提交到远端的GitHub仓库中,此时就需要输入GitHub的密码,注意不是输入web页面的登录密码,而是一个&lt;code>Personal access tokens&lt;/code>,获取方式详见&lt;a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token">这里&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>这里有一点要注意的是tag, 在执行过程中,需要选择发布的artifactId, 下一个版本artifactId以及发布版本的tag, tag默认的是dubbo-parent-xxxx,需要改成dubbo-xxxx&lt;/p>
&lt;/blockquote>
&lt;p>执行完上述步骤后,你会发现:&lt;/p>
&lt;ol>
&lt;li>&lt;code>source-release.zip&lt;/code> 和 &lt;code>bin-release.zip&lt;/code>包已经生成在&lt;code>dubbo-distribution&lt;/code>目录下,请解压并检查文件是否完整&lt;/li>
&lt;li>本地已经打出相应的tag,同时新增一个commit,名叫&lt;code>[maven-release-plugin] prepare release dubbo-x.x.x&lt;/code>&lt;/li>
&lt;li>分支版本自动升级为&lt;code>${release_version+1}-SNAPSHOT&lt;/code>,同时新增一个commit,名叫&lt;code>[[maven-release-plugin] prepare for next development iteration&lt;/code>&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>如果指定了&lt;code>-DpushChanges=true&lt;/code>, 则本地提交会自动推送到远端的GitHub仓库。根据经验,建议不要指定为true,请设置为false,待本地检查通过之后再手动提交&lt;/p>
&lt;/blockquote>
&lt;p>&lt;del>执行release:perform,做staging发布&lt;/del>&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ mvn -Prelease release:perform -Darguments&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">&amp;#34;-DskipTests&amp;#34;&lt;/span> -DautoVersionSubmodules&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#b58900">true&lt;/span> -Dusername&lt;span style="color:#719e07">=&lt;/span>YOUR GITHUB ID
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>此时插件会自动下载远端的tag对应的源码,编译后,将所有Artifacts发布到配置的远程&lt;a href="http://repository.apache.org">maven仓库&lt;/a>,处于staging状态。&lt;/p>
&lt;h3 id="使用mvn-deploy进行deploy">使用mvn deploy进行deploy&lt;/h3>
&lt;blockquote>
&lt;p>要求:maven 3.5+&lt;/p>
&lt;/blockquote>
&lt;p>修改pom文件中的版本号,从2.7.x-SNAPSHOT改为2.7.x, 目前有3个地方需要修改。建议全文搜索。&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ mvn clean install -Prelease
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ mvn deploy -Prelease -DskipTests
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>所有被deploy到远程&lt;a href="http://repository.apache.org">maven仓库&lt;/a>的Artifacts都会处于staging状态&lt;/p>
&lt;h4 id="注意点">注意点&lt;/h4>
&lt;ul>
&lt;li>在deploy执行过程中,有可能因为网络等原因被中断,如果是这样,可以重新开始执行。&lt;/li>
&lt;li>deploy执行到maven仓库的时候,请确认下包的总量是否正确。多次出现了包丢失的情况,特别是dubbo-parent包。&lt;/li>
&lt;/ul>
&lt;h2 id="准备apache发布">准备Apache发布&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>准备svn本机环境(Apache使用svn托管项目的发布内容)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>将dubbo checkout到本地目录&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ svn checkout https://dist.apache.org/repos/dist/dev/dubbo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># 假定本地目录为 ~/apache/dubbo&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>当前发布版本为${release_version},新建目录&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#b58900">cd&lt;/span> ~/apache/dubbo &lt;span style="color:#586e75"># dubbo svn根目录&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ mkdir &lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">release_version&lt;/span>&lt;span style="color:#2aa198">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>添加public key到&lt;a href="https://dist.apache.org/repos/dist/dev/dubbo/KEYS">KEYS&lt;/a>文件并提交到SVN仓库(第一次做发布的人需要做这个操作,具体操作参考KEYS文件里的说明)。KEYS主要是让参与投票的人在本地导入,用来校验sign的正确性&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-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#719e07">(&lt;/span>gpg --list-sigs &amp;lt;your name&amp;gt; &lt;span style="color:#719e07">&amp;amp;&amp;amp;&lt;/span> gpg --armor --export &amp;lt;your name&amp;gt;&lt;span style="color:#719e07">)&lt;/span> &amp;gt;&amp;gt; KEYS
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>拷贝&lt;code>dubbo-distribution/dubbo-apache-release/target&lt;/code>下的source相关的包到svn本地仓库&lt;code>dubbo/${release_version}&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>生成sha512签名&lt;/p>
&lt;p>针对&lt;code>src.zip&lt;/code>&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ shasum -a &lt;span style="color:#2aa198">512&lt;/span> apache-dubbo-&lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">release_version&lt;/span>&lt;span style="color:#2aa198">}&lt;/span>-src.zip &amp;gt;&amp;gt; apache-dubbo-&lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">release_version&lt;/span>&lt;span style="color:#2aa198">}&lt;/span>-src.zip.sha512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>针对&lt;code>bin-release.zip&lt;/code>,需要增加&lt;code>-b&lt;/code>参数,表明是一个二进制文件&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ shasum -b -a &lt;span style="color:#2aa198">512&lt;/span> apache-dubbo-&lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">release_version&lt;/span>&lt;span style="color:#2aa198">}&lt;/span>-bin.zip &amp;gt;&amp;gt; apache-dubbo-&lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">release_version&lt;/span>&lt;span style="color:#2aa198">}&lt;/span>-bin.zip.sha512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>如果有binary release要同时发布&lt;/p>
&lt;p>在&lt;code>dubbo-distribution/dubbo-apache-release/target&lt;/code>目录下,拷贝&lt;code>bin.zip&lt;/code>以及&lt;code>bin.zip.asc&lt;/code>到svn本地仓库&lt;code>dubbo/${release_version}&lt;/code>,参考第6步,生成sha512签名。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>提交到Apache svn&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ svn status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ svn commit -m &lt;span style="color:#2aa198">&amp;#39;prepare for ${release_version} RC1&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>关闭Maven的staging仓库&lt;/p>
&lt;p>此步骤为发布2.7.0及以上版本必须要的步骤。在此之前请先确保所有的artifact都是ok的。登录http://repository.apache.org,点击左侧的&lt;code>Staging repositories&lt;/code>,然后搜索Dubbo关键字,会出现一系列的仓库,选择你最近上传的仓库,然后点击上方的Close按钮,这个过程会进行一系列检查,检查通过以后,在下方的Summary标签页上出现一个连接,请保存好这个链接,需要放在接下来的投票邮件当中。链接应该是类似这样的: &lt;code>https://repository.apache.org/content/repositories/orgapachedubbo-1015&lt;/code>&lt;/p>
&lt;blockquote>
&lt;p>请注意点击Close可能会出现失败,通常是网络原因,只要重试几次就可以了。可以点击Summary旁边的Activity标签来确认。&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;/ol>
&lt;h2 id="验证release-candidates">验证Release Candidates&lt;/h2>
&lt;p>详细的检查列表请参考官方的&lt;a href="https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist">check list&lt;/a>&lt;/p>
&lt;p>首先,从一下地址下载要发布的Release Candidate到本地环境:&lt;/p>
&lt;pre>
https://dist.apache.org/repos/dist/dev/dubbo/${release_version}/
&lt;/pre>
&lt;p>然后,开始验证环节,验证包含但不限于以下内容和形式&lt;/p>
&lt;h3 id="检查签名和hash等信息">检查签名和hash等信息&lt;/h3>
&lt;h4 id="检查sha512哈希">检查sha512哈希&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-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>$ shasum -c apache-dubbo-&lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">release_version&lt;/span>&lt;span style="color:#2aa198">}&lt;/span>-src.zip.sha512
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ shasum -c apache-dubbo-&lt;span style="color:#2aa198">${&lt;/span>&lt;span style="color:#268bd2">release_version&lt;/span>&lt;span style="color:#2aa198">}&lt;/span>-bin.zip.sha512
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="检查gpg签名">检查gpg签名&lt;/h4>
&lt;p>如果是第一次检查,需要首先导入公钥。&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-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span> $ curl https://dist.apache.org/repos/dist/dev/dubbo/KEYS &amp;gt;&amp;gt; KEYS &lt;span style="color:#586e75"># download public keys to local directory&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> $ gpg --import KEYS &lt;span style="color:#586e75"># import keys&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> $ gpg —-edit-key liujun
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;gt; trust &lt;span style="color:#586e75"># type trust command&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后使用如下命令检查签名&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-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>gpg --verify apache-dubbo-3.0.4-src.zip.asc apache-dubbo-3.0.4-src.zip
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gpg --verify apache-dubbo-3.0.4-bin.zip.asc apache-dubbo-3.0.4-bin.zip
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="检查源码包的文件内容">检查源码包的文件内容&lt;/h3>
&lt;p>解压缩&lt;code>apache-dubbo-${release_version}-src.zip&lt;/code>,进行如下检查:&lt;/p>
&lt;ul>
&lt;li>DISCLAIMER exists&lt;/li>
&lt;li>LICENSE and NOTICE exists and contents are good&lt;/li>
&lt;li>All files and no binary files exist&lt;/li>
&lt;li>All files has standard ASF License header&lt;/li>
&lt;li>Can compile from source&lt;/li>
&lt;li>All unit tests can pass
&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-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mvn clean &lt;span style="color:#b58900">test&lt;/span> &lt;span style="color:#586e75"># This will run all unit tests&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># you can also open rat and style plugin to check if every file meets requirements.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mvn clean &lt;span style="color:#b58900">test&lt;/span> -Drat.skip&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#b58900">false&lt;/span> -Dcheckstyle.skip&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#b58900">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>Release candidates match with corresponding tags, you can find tag link and hash in vote email.
&lt;ul>
&lt;li>check the version number in pom.xml are the same&lt;/li>
&lt;li>check there are no extra files or directories in the source package, for example, no empty directories or useless log files,这里需要注意换行符是否一致&lt;br>
&lt;code>diff -r a rc_dir tag_dir&lt;/code>&lt;/li>
&lt;li>check the top n tag commits, dive into the related files and check if the source package has the same changes&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="检查三方依赖的合规性">检查三方依赖的合规性&lt;/h3>
&lt;p>按照Apache基金会合规性规定,源码或者是二进制分发包中均不能包含Category X的依赖,其中就常见的是包含了GPL/LGPL的依赖,即使是传递依赖也不行。因此在发版的时候需要通过以下的命令进行检查:&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-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mvn license:add-third-party -Dlicense.useMissingFile
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>find . -name THIRD-PARTY.txt | xargs grep -E &lt;span style="color:#2aa198">&amp;#39;GPL|General Public License&amp;#39;&lt;/span> | grep -v Apache | grep -v MIT | grep -v CDDL
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果一个依赖提供了双协议或多重协议,可以选择与Apache最兼容的一个协议。&lt;/p>
&lt;p>你可以参考此文章:&lt;a href="https://apache.org/legal/resolved.html">ASF第三方许可证策&lt;/a>&lt;/p>
&lt;h3 id="检查二进制包的文件内容">检查二进制包的文件内容&lt;/h3>
&lt;p>解压缩&lt;code>apache-dubbo-${release_version}-bin.zip&lt;/code>,进行如下检查:&lt;/p>
&lt;ul>
&lt;li>Check signatures are good&lt;/li>
&lt;li>LICENSE and NOTICE exists and contents are good&lt;/li>
&lt;/ul>
&lt;p>注意,如果二进制包里面引入了第三方依赖,则需要更新LICENSE,加入第三方依赖的LICENSE,如果第三方依赖的LICENSE是Apache 2.0,并且对应的项目中包含了NOTICE,还需要更新NOTICE文件&lt;/p>
&lt;h2 id="进入投票">进入投票&lt;/h2>
&lt;p>dubbo毕业之后,投票分只需要一次:&lt;/p>
&lt;ol>
&lt;li>Dubbo社区投票,发起投票邮件到dev@dubbo.apache.org。在社区开发者Review,经过至少72小时并统计到3个同意发版的binding票后(只有PMC的票才是binding),即可进入下一阶段的投票。&lt;/li>
&lt;/ol>
&lt;p>Dubbo社区投票邮件模板:&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-text" data-lang="text">&lt;span style="display:flex;">&lt;span>Hello Dubbo Community,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>This is a call for vote to release Apache Dubbo version 2.7.2.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The release candidates:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>https://dist.apache.org/repos/dist/dev/dubbo/2.7.2/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The staging repo:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>https://repository.apache.org/content/repositories/orgapachedubbo-1005
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Git tag for the release:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>https://github.com/apache/dubbo/tree/dubbo-2.7.2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Hash for the release tag:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>afab04c53edab38d52275d2a198ea1aff7a4f41e
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Release Notes:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>https://github.com/apache/dubbo/releases/tag/untagged-4775c0a22c60fca55118
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The artifacts have been signed with Key : 28681CB1, which can be found in the keys file:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>https://dist.apache.org/repos/dist/dev/dubbo/KEYS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The vote will be open for at least 72 hours or until necessary number of votes are reached.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Please vote accordingly:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[ ] +1 approve
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[ ] +0 no opinion
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[ ] -1 disapprove with the reason
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Thanks,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The Apache Dubbo Team
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>宣布投票结果模板:&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-text" data-lang="text">&lt;span style="display:flex;">&lt;span>We’ve received 3 +1 binding votes and one +1 non-binding vote:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+1 binding, Ian Luo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+1 binding, Huxing Zhang
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+1 binding, Jun Liu
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+1 non-binding, Jerrick
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>I will start to release today.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Best regards,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The Apache Dubbo Team
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="正式发布">正式发布&lt;/h2>
&lt;ol>
&lt;li>将&lt;a href="https://dist.apache.org/repos/dist/dev/dubbo">dev&lt;/a>目录下的发布包添加到&lt;a href="https://dist.apache.org/repos/dist/release/dubbo">release&lt;/a>目录下,KEYS有更新的,也需要同步更新。&lt;/li>
&lt;li>删除&lt;a href="https://dist.apache.org/repos/dist/dev/dubbo">dev&lt;/a>目录下的发布包&lt;/li>
&lt;li>删除&lt;a href="https://dist.apache.org/repos/dist/release/dubbo">release&lt;/a>目录下上一个版本的发布包,这些包会被自动保存在&lt;a href="https://archive.apache.org/dist/dubbo">这里&lt;/a>&lt;/li>
&lt;li>此步骤为发布2.7.0及以上版本必须要的步骤。在此之前请先确保所有的artifact都是ok的。登录http://repository.apache.org,点击左侧的&lt;code>Staging repositories&lt;/code>,然后搜索Dubbo关键字,会出现一系列的仓库,选择你最近上传的仓库,然后点击上方的Release按钮.&lt;/li>
&lt;li>发布GitHub上的&lt;a href="https://github.com/apache/dubbo/releases">release notes&lt;/a>&lt;/li>
&lt;li>修改GitHub的Readme文件,将版本号更新到最新发布的版本&lt;/li>
&lt;li>在官网下载&lt;a href="https://dubbo.apache.org/en/blog/2020/05/18/past-releases/">页面&lt;/a>上添加最新版本的下载链接。最新的下载链接应该类似&lt;a href="https://www.apache.org/dyn/closer.cgi?path=dubbo/$VERSION/apache-dubbo-$VERSION-source-release.zip">这样&lt;/a>. 同时更新以前版本的下载链接,改为类似&lt;code>https://archive.apache.org/dist/dubbo/$VERSION/apache-dubbo-$VERSION-bin-release.zip&lt;/code>. 具体可以参考过往的&lt;a href="https://dubbo.apache.org/en/blog/2020/05/18/past-releases/">下载链接&lt;/a> [可以参考] (&lt;a href="https://github.com/apache/dubbo-website/pull/887">https://github.com/apache/dubbo-website/pull/887&lt;/a>)&lt;/li>
&lt;li>合并&lt;code>${release-version}-release&lt;/code>分支到对应的主干分支, 然后删除相应的release分支,例如: &lt;code>git push origin --delete 2.7.0-release&lt;/code>&lt;/li>
&lt;li>发邮件到 &lt;code>dev@dubbo.apache.org&lt;/code>
宣布release邮件模板:&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-text" data-lang="text">&lt;span style="display:flex;">&lt;span>Hello Community,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The Apache Dubbo team is pleased to announce that the
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2.6.6 has just been released.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Apache Dubbo™ is a high-performance, java based, open source
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RPC framework. Dubbo offers three key functionalities, which include
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>interface based remote call, fault tolerance &amp;amp; load balancing, and
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>automatic service registration &amp;amp; discovery.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Both the source release[1] and the maven binary release[2] are available
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>now, you can also find the detailed release notes here[3].
&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>If you have any usage questions, or have problems when upgrading or find
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>any problems about enhancements included in this release, please don’t
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hesitate to let us know by sending feedback to this mailing list or filing
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>an issue on GitHub[4].
&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>[1] https://dubbo.apache.org/en/blog/2020/05/18/past-releases/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[2] https://repo1.maven.org/maven2/org/apache/dubbo/dubbo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[3] https://github.com/apache/dubbo/releases
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>[4] https://github.com/apache/dubbo/issues
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="完成maven-convenient-binary发布可选">完成Maven Convenient Binary发布(可选)&lt;/h2>
&lt;p>&lt;strong>repository.apache.org&lt;/strong> nexus仓库的权限已经申请,参见&lt;a href="https://issues.apache.org/jira/browse/INFRA-16451">jira&lt;/a>&lt;/p>
&lt;p>发布jar包到maven仓库,首先访问&lt;a href="https://repository.apache.org">repository.apache.org&lt;/a>, 选择&lt;code>staging repository&lt;/code>, 点击&lt;code>release&lt;/code>按钮。等待一段时间之后,在&lt;a href="https://repository.apache.org/content/repositories/releases/org/apache/dubbo/">这里&lt;/a>确认完整性和正确性. 发布到Maven中央仓库则还需要等待一段时间。可以在&lt;a href="https://repo.maven.apache.org/maven2/org/apache/dubbo">这里&lt;/a>进行确认。&lt;/p>
&lt;h2 id="faq">FAQ&lt;/h2>
&lt;h4 id="gpg-signing-failed-inappropriate-ioctl-for-device">gpg: signing failed: Inappropriate ioctl for device&lt;/h4>
&lt;p>If you&amp;rsquo;ve encountered this error, try the following commands:&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>export GPG_TTY=$(tty)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Latest: 网站向导</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/website-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/website-guide_dev/</guid><description>
&lt;ol>
&lt;li>Apache Dubbo 的网站仓库是 &lt;a href="https://github.com/apache/dubbo-website">https://github.com/apache/dubbo-website&lt;/a>&lt;/li>
&lt;li>网站构建完毕后,它会被自动发布到 dubbo.apache.org,您也可以通过 &lt;a href="https://selfserve.apache.org">https://selfserve.apache.org&lt;/a> 手动触发(需要使用 Apache 账号登陆)&lt;/li>
&lt;/ol></description></item><item><title>Latest: 给问题打标签</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/label-an-issue-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/label-an-issue-guide_dev/</guid><description>
&lt;p>如果您正在处理一个问题,请记得&lt;strong>给这个问题标记一个或者多个您认为有意义的标签&lt;/strong>。有了标签,其他开发人员就会很轻松地识别出问题,以便对其进行分类并跟踪进度。&lt;/p>
&lt;p>对于需要编码和发版修复的 issues 和 pull requests,需要您&lt;strong>将其标记为 &lt;a href="https://github.com/apache/dubbo/milestones">milestone&lt;/a>&lt;/strong>。&lt;/p>
&lt;p>一些常用的标签:&lt;/p>
&lt;ul>
&lt;li>请求帮助
&lt;ul>
&lt;li>help wanted&lt;/li>
&lt;li>good first issue&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>优先级
&lt;ul>
&lt;li>priority/blocker&lt;/li>
&lt;li>priority/high&lt;/li>
&lt;li>priority/low&lt;/li>
&lt;li>priority/normal&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>状态
&lt;ul>
&lt;li>status/need-triage&lt;/li>
&lt;li>status/DO-NOT-MERGE&lt;/li>
&lt;li>status/READY-TO-MERGE&lt;/li>
&lt;li>status/invalid&lt;/li>
&lt;li>status/wontfix&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>类型
&lt;ul>
&lt;li>type/bug&lt;/li>
&lt;li>type/documentation&lt;/li>
&lt;li>type/enhancement&lt;/li>
&lt;li>type/feature&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>Latest: 官方 Dubbo 主页的维护</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/apache-dubbo-page_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/apache-dubbo-page_dev/</guid><description>
&lt;p>Apache 有一个官方的网站,用来维护所有的孵化项目的信息。每一个孵化项目在这个网站下都有一个信息页。
Dubbo 的信息页地址是 &lt;a href="https://incubator.apache.org/projects/dubbo.html">https://incubator.apache.org/projects/dubbo.html&lt;/a>。&lt;/p>
&lt;p>当项目发生比较大的变化,比如新的 committer 的加入,新的 PMC 的当选,或是新版本的 Release 等,都需要将这些更新信息维护到这个页面。&lt;/p>
&lt;p>这个官方网站的项目地址是&lt;a href="https://svn.apache.org/repos/asf/incubator/public/trunk">https://svn.apache.org/repos/asf/incubator/public/trunk&lt;/a>。&lt;/p>
&lt;p>维护这个页面的方法如下:&lt;/p>
&lt;p>1.安装 SVN。若是 Mac OS X 系统或是 Linux 系统,则自带了 SVN。若是 Windows 系统,则请首先自行安装 SVN。&lt;/p>
&lt;p>2.用 SVN 将这个&lt;a href="https://svn.apache.org/repos/asf/incubator/public/trunk">项目&lt;/a> checkout 下来 。&lt;/p>
&lt;p>3.修改 content/projects/dubbo.xml 文件,并保存。&lt;/p>
&lt;p>4.安装 ANT。执行 trunk 目录下的 build.sh 或者 build.bat 脚本构建项目。&lt;/p>
&lt;p>5.构建完成后,可以用浏览器打开 target/site/projects/dubbo.html 文件,预览修改是否生效。&lt;/p>
&lt;p>6.用 SVN 的 commit 命令将 dubbo.xml 文件提交到服务器,并且不要提交 dubbo.html 文件(因为服务器端会定时自动构建)。
此过程会要求输入Apache id和密码。&lt;/p>
&lt;p>参考:&lt;/p>
&lt;ol>
&lt;li>&lt;a href="http://incubator.apache.org/guides/website.html">http://incubator.apache.org/guides/website.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://svn.apache.org/repos/asf/incubator/public/trunk/README.txt">https://svn.apache.org/repos/asf/incubator/public/trunk/README.txt&lt;/a>&lt;/li>
&lt;/ol></description></item></channel></rss>