blob: 37e2788f88c814642813dea6f2c6312834a2a3d1 [file] [log] [blame]
<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS content="INDEX, FOLLOW"><link rel=canonical href=https://cn.dubbo.apache.org/zh-cn/contact/committer/release-guide/java-sdk/><script>var _hmt=_hmt||[];(function(){var e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta http-equiv=Content-Security-Policy content="frame-src *"><meta name=generator content="Hugo 0.122.0"><link rel="shortcut icon" type=image/png href=/imgs/favicon.png><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=manifest href=/manifest.webmanifest><title>Java SDK Release 流程 | Apache Dubbo</title><meta property="og:title" content="Java SDK Release 流程">
<meta property="og:description" content="Java SDK Release 流程"><meta property="og:type" content="article"><meta property="og:url" content="https://cn.dubbo.apache.org/zh-cn/contact/committer/release-guide/java-sdk/"><meta property="article:section" content="contact"><meta property="article:modified_time" content="2024-03-05T07:12:07+08:00"><meta itemprop=name content="Java SDK Release 流程"><meta itemprop=description content="Java SDK Release 流程"><meta itemprop=dateModified content="2024-03-05T07:12:07+08:00"><meta itemprop=wordCount content="1168"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="Java SDK Release 流程"><meta name=twitter:description content="Java SDK Release 流程"><script async src="https://www.googletagmanager.com/gtag/js?id=G-NM6FFMT51J"></script><script>var doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-NM6FFMT51J",{anonymize_ip:!1})}</script><link rel=preload href=/scss/main.min.f77e221bcdbe0cadb996060fe82063c747b60c229a1f8bbf0ee529adbadd84fa.css as=style><link href=/scss/main.min.f77e221bcdbe0cadb996060fe82063c747b60c229a1f8bbf0ee529adbadd84fa.css rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script><meta name=theme-color content="#326ce5"><link rel=stylesheet href=/css/feature-states.css><meta name=description content="Java SDK Release 流程"><meta property="og:description" content="Java SDK Release 流程"><meta name=twitter:description content="Java SDK Release 流程"><meta property="og:url" content="https://cn.dubbo.apache.org/zh-cn/contact/committer/release-guide/java-sdk/"><meta property="og:title" content="Java SDK Release 流程"><meta name=twitter:title content="Java SDK Release 流程"><meta name=twitter:image:alt content="Apache Dubbo"><meta property="og:type" content="article"><meta name=viewport content="width=device-width"><script async defer src=/js/github-buttons.js></script><link href=/css/community.css rel=stylesheet><link href=/css/contactus.css rel=stylesheet><link href=/css/language.css rel=stylesheet><script src=/js/script.js></script></head><body class="td-page td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0"><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/overview/home/><span>文档</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/blog/><span>博客</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/download/><span>版本发布</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class="nav-link active" href=/zh-cn/contact/><span class=active>联系社区</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=https://start.dubbo.apache.org/bootstrap.html target=_blank><span>Initializer</span><i class='fas fa-external-link-alt'></i></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/github/><span>Github</span><i class='fa-brands fa-github'></i></a></li><li class="nav-item dropdown d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdownMenuLink role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>中文</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/en/>English</a></div></li><li class="nav-item dropdown d-lg-block"><div class="nav-item d-none d-lg-block"></div></li></ul></div></nav><section class="header-hero text-white pb-0 light-text"></section></header><div class="container-fluid td-outer"><div class=td-main><div class="row flex-md-nowrap"><div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none"><script>$(function(){$("#td-section-nav a").removeClass("active"),$("#td-section-nav #m-zh-cncontactcommitterrelease-guidejava-sdk").addClass("active"),$("#td-section-nav #m-zh-cncontactcommitterrelease-guidejava-sdk-li span").addClass("td-sidebar-nav-active-item"),$("#td-section-nav #m-zh-cncontactcommitterrelease-guidejava-sdk").parents("li").addClass("active-path"),$("#td-section-nav li.active-path").addClass("show"),$("#td-section-nav li.active-path").children("input").prop("checked",!0),$("#td-section-nav #m-zh-cncontactcommitterrelease-guidejava-sdk-li").siblings("li").addClass("show"),$("#td-section-nav #m-zh-cncontactcommitterrelease-guidejava-sdk-li").children("ul").children("li").addClass("show"),$("#td-sidebar-menu").toggleClass("d-none")})</script><div id=td-sidebar-menu class="td-sidebar__inner d-none"><div id=content-mobile><form class="td-sidebar__search d-flex align-items-center"><button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav foldable-nav" id=td-section-nav><ul class="td-sidebar-nav__section pr-md-3 ul-0"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cncontact-li><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactbooks-li><input type=checkbox id=m-zh-cncontactbooks-check>
<label for=m-zh-cncontactbooks-check><a href=/zh-cn/contact/books/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cncontactbooks><span>书籍与资料</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cncontactcontributor-li><input type=checkbox id=m-zh-cncontactcontributor-check>
<label for=m-zh-cncontactcontributor-check><a href=/zh-cn/contact/contributor/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cncontactcontributor><span>Contributor 指南</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributorbecome-a-committer_dev-li><input type=checkbox id=m-zh-cncontactcontributorbecome-a-committer_dev-check>
<label for=m-zh-cncontactcontributorbecome-a-committer_dev-check><a href=/zh-cn/contact/contributor/become-a-committer_dev/ title="如何成为 Dubbo Committer" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributorbecome-a-committer_dev><span>成为 Committer</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributornew-contributor-guide_dev-li><input type=checkbox id=m-zh-cncontactcontributornew-contributor-guide_dev-check>
<label for=m-zh-cncontactcontributornew-contributor-guide_dev-check><a href=/zh-cn/contact/contributor/new-contributor-guide_dev/ title=新贡献者向导 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributornew-contributor-guide_dev><span>新手向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributormailing-list-subscription-guide_dev-li><input type=checkbox id=m-zh-cncontactcontributormailing-list-subscription-guide_dev-check>
<label for=m-zh-cncontactcontributormailing-list-subscription-guide_dev-check><a href=/zh-cn/contact/contributor/mailing-list-subscription-guide_dev/ title=邮件列表订阅向导 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributormailing-list-subscription-guide_dev><span>邮件组向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributorreporting-security-issues_dev-li><input type=checkbox id=m-zh-cncontactcontributorreporting-security-issues_dev-check>
<label for=m-zh-cncontactcontributorreporting-security-issues_dev-check><a href=/zh-cn/contact/contributor/reporting-security-issues_dev/ title=报告安全问题 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributorreporting-security-issues_dev><span>反馈漏洞</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributorsoftware-donation-guide_dev-li><input type=checkbox id=m-zh-cncontactcontributorsoftware-donation-guide_dev-check>
<label for=m-zh-cncontactcontributorsoftware-donation-guide_dev-check><a href=/zh-cn/contact/contributor/software-donation-guide_dev/ title=软件捐献向导 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributorsoftware-donation-guide_dev><span>捐献向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributordubbo-extension-guide_dev-li><input type=checkbox id=m-zh-cncontactcontributordubbo-extension-guide_dev-check>
<label for=m-zh-cncontactcontributordubbo-extension-guide_dev-check><a href=/zh-cn/contact/contributor/dubbo-extension-guide_dev/ title="扩展 Dubbo 向导" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributordubbo-extension-guide_dev><span>扩展 Dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributortest-coverage-guide_dev-li><input type=checkbox id=m-zh-cncontactcontributortest-coverage-guide_dev-check>
<label for=m-zh-cncontactcontributortest-coverage-guide_dev-check><a href=/zh-cn/contact/contributor/test-coverage-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributortest-coverage-guide_dev><span>测试覆盖率向导</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cncontactcommitter-li><input type=checkbox id=m-zh-cncontactcommitter-check>
<label for=m-zh-cncontactcommitter-check><a href=/zh-cn/contact/committer/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cncontactcommitter><span>Committer 指南</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitternew-committer-guide_dev-li><input type=checkbox id=m-zh-cncontactcommitternew-committer-guide_dev-check>
<label for=m-zh-cncontactcommitternew-committer-guide_dev-check><a href=/zh-cn/contact/committer/new-committer-guide_dev/ title="Apache 提交者注册流程" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitternew-committer-guide_dev><span>注册流程</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommittercla-signing-guide_dev-li><input type=checkbox id=m-zh-cncontactcommittercla-signing-guide_dev-check>
<label for=m-zh-cncontactcommittercla-signing-guide_dev-check><a href=/zh-cn/contact/committer/cla-signing-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommittercla-signing-guide_dev><span>CLA 签署向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cncontactcommitterrelease-guide-li><input type=checkbox id=m-zh-cncontactcommitterrelease-guide-check>
<label for=m-zh-cncontactcommitterrelease-guide-check><a href=/zh-cn/contact/committer/release-guide/ title="如何准备 Apache Release" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cncontactcommitterrelease-guide><span>发版准备</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitterrelease-guidecommon-li><input type=checkbox id=m-zh-cncontactcommitterrelease-guidecommon-check>
<label for=m-zh-cncontactcommitterrelease-guidecommon-check><a href=/zh-cn/contact/committer/release-guide/common/ title="通用 Release 流程" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitterrelease-guidecommon><span>通用 Release</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitterrelease-guidejava-sdk-li><input type=checkbox id=m-zh-cncontactcommitterrelease-guidejava-sdk-check>
<label for=m-zh-cncontactcommitterrelease-guidejava-sdk-check><a href=/zh-cn/contact/committer/release-guide/java-sdk/ title="Java SDK Release 流程" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitterrelease-guidejava-sdk><span>Java SDK Release</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitterwebsite-guide_dev-li><input type=checkbox id=m-zh-cncontactcommitterwebsite-guide_dev-check>
<label for=m-zh-cncontactcommitterwebsite-guide_dev-check><a href=/zh-cn/contact/committer/website-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitterwebsite-guide_dev><span>网站向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitterlabel-an-issue-guide_dev-li><input type=checkbox id=m-zh-cncontactcommitterlabel-an-issue-guide_dev-check>
<label for=m-zh-cncontactcommitterlabel-an-issue-guide_dev-check><a href=/zh-cn/contact/committer/label-an-issue-guide_dev/ title=给问题打标签 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitterlabel-an-issue-guide_dev><span>问题标签</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitterapache-dubbo-page_dev-li><input type=checkbox id=m-zh-cncontactcommitterapache-dubbo-page_dev-check>
<label for=m-zh-cncontactcommitterapache-dubbo-page_dev-check><a href=/zh-cn/contact/committer/apache-dubbo-page_dev/ title="官方 Dubbo 主页的维护" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitterapache-dubbo-page_dev><span>官方主页</span></a></label></li></ul></li></ul></li></ul></nav></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/zh-cn/contact/>联系社区</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/zh-cn/contact/committer/>Committer 指南</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/zh-cn/contact/committer/release-guide/>发版准备</a></li><li class="breadcrumb-item active" aria-current=page><a href=https://cn.dubbo.apache.org/zh-cn/contact/committer/release-guide/java-sdk/ aria-disabled=true class="btn-link disabled">Java SDK Release</a></li></ol></nav><div class=td-content><h1>Java SDK Release 流程</h1><div class=lead>Java SDK Release 流程</div><header class=article-meta></header><h2 id=理解-apache-发布的内容和流程>理解 Apache 发布的内容和流程</h2><p>总的来说,Source Release 是 Apache 关注的重点,也是发布的必须内容;而 Binary Release 是可选项,Dubbo 可以选择是否发布二进制包到 Apache 仓库或者发布到 Maven 中央仓库。</p><p>请参考以下链接,找到更多关于 ASF 的发布指南:</p><ul><li><a href=http://www.apache.org/dev/release-publishing>Apache Release Guide</a></li><li><a href=http://www.apache.org/dev/release.html>Apache Release Policy</a></li><li><a href=http://www.apache.org/dev/publishing-maven-artifacts.html>Maven Release Info</a></li></ul><h2 id=本地构建环境准备>本地构建环境准备</h2><p>主要包括签名工具、Maven 仓库认证相关准备</p><h3 id=安装gpg>安装GPG</h3><p>详细文档请参见<a href=https://www.gnupg.org/download/index.html>这里</a>, Mac OS 下配置如下</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-sh data-lang=sh><span style=display:flex><span>$ brew install gpg
</span></span><span style=display:flex><span>$ gpg --version <span style=color:#586e75>#检查版本,应该为2.x</span>
</span></span></code></pre></div><h3 id=用gpg生成key>用gpg生成key</h3><p>根据提示,生成 key</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-shell data-lang=shell><span style=display:flex><span>$ gpg --full-gen-key
</span></span><span style=display:flex><span>gpg <span style=color:#719e07>(</span>GnuPG<span style=color:#719e07>)</span> 2.0.12; Copyright <span style=color:#719e07>(</span>C<span style=color:#719e07>)</span> <span style=color:#2aa198>2009</span> Free Software Foundation, Inc.
</span></span><span style=display:flex><span>This is free software: you are free to change and redistribute it.
</span></span><span style=display:flex><span>There is NO WARRANTY, to the extent permitted by law.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Please <span style=color:#719e07>select</span> what kind of key you want:
</span></span><span style=display:flex><span> <span style=color:#719e07>(</span>1<span style=color:#719e07>)</span> RSA and RSA <span style=color:#719e07>(</span>default<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>(</span>2<span style=color:#719e07>)</span> DSA and Elgamal
</span></span><span style=display:flex><span> <span style=color:#719e07>(</span>3<span style=color:#719e07>)</span> DSA <span style=color:#719e07>(</span>sign only<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>(</span>4<span style=color:#719e07>)</span> RSA <span style=color:#719e07>(</span>sign only<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span>Your selection? <span style=color:#2aa198>1</span>
</span></span><span style=display:flex><span>RSA keys may be between <span style=color:#2aa198>1024</span> and <span style=color:#2aa198>4096</span> bits long.
</span></span><span style=display:flex><span>What keysize <span style=color:#719e07>do</span> you want? <span style=color:#719e07>(</span>2048<span style=color:#719e07>)</span> <span style=color:#2aa198>4096</span>
</span></span><span style=display:flex><span>Requested keysize is <span style=color:#2aa198>4096</span> bits
</span></span><span style=display:flex><span>Please specify how long the key should be valid.
</span></span><span style=display:flex><span> <span style=color:#268bd2>0</span> <span style=color:#719e07>=</span> key does not expire
</span></span><span style=display:flex><span> &lt;n&gt; <span style=color:#719e07>=</span> key expires in n days
</span></span><span style=display:flex><span> &lt;n&gt;w <span style=color:#719e07>=</span> key expires in n weeks
</span></span><span style=display:flex><span> &lt;n&gt;m <span style=color:#719e07>=</span> key expires in n months
</span></span><span style=display:flex><span> &lt;n&gt;y <span style=color:#719e07>=</span> key expires in n years
</span></span><span style=display:flex><span>Key is valid <span style=color:#719e07>for</span>? <span style=color:#719e07>(</span>0<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span>Key does not expire at all
</span></span><span style=display:flex><span>Is this correct? <span style=color:#719e07>(</span>y/N<span style=color:#719e07>)</span> y
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>GnuPG needs to construct a user ID to identify your key.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Real name: Robert Burrell Donkin
</span></span><span style=display:flex><span>Email address: rdonkin@apache.org
</span></span><span style=display:flex><span>Comment: CODE SIGNING KEY
</span></span><span style=display:flex><span>You selected this USER-ID:
</span></span><span style=display:flex><span> <span style=color:#2aa198>&#34;Robert Burrell Donkin (CODE SIGNING KEY) &lt;rdonkin@apache.org&gt;&#34;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Change <span style=color:#719e07>(</span>N<span style=color:#719e07>)</span>ame, <span style=color:#719e07>(</span>C<span style=color:#719e07>)</span>omment, <span style=color:#719e07>(</span>E<span style=color:#719e07>)</span>mail or <span style=color:#719e07>(</span>O<span style=color:#719e07>)</span>kay/<span style=color:#719e07>(</span>Q<span style=color:#719e07>)</span>uit? O
</span></span><span style=display:flex><span>You need a Passphrase to protect your secret key. <span style=color:#586e75># 填入密码,以后打包过程中会经常用到</span>
</span></span></code></pre></div><h3 id=查看-key-id>查看 key id</h3><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-sh data-lang=sh><span style=display:flex><span>$ gpg --list-keys
</span></span><span style=display:flex><span>pub rsa4096/28681CB1 2018-04-26 <span style=color:#586e75># 28681CB1就是key id</span>
</span></span><span style=display:flex><span>uid <span style=color:#719e07>[</span>ultimate<span style=color:#719e07>]</span> liujun <span style=color:#719e07>(</span>apache-dubbo<span style=color:#719e07>)</span> &lt;liujun@apache.org&gt;
</span></span><span style=display:flex><span>sub rsa4096/D3D6984B 2018-04-26
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75># 通过key id发送public key到keyserver</span>
</span></span><span style=display:flex><span>$ gpg --keyserver pgpkeys.mit.edu --send-key 28681CB1
</span></span><span style=display:flex><span><span style=color:#586e75># 其中,pgpkeys.mit.edu为随意挑选的keyserver,keyserver列表为:https://sks-keyservers.net/status/,为相互之间是自动同步的,选任意一个都可以。</span>
</span></span></code></pre></div><p>如果有多个 public key,设置默认 key。修改<code>~/.gnupg/gpg.conf</code></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-sh data-lang=sh><span style=display:flex><span><span style=color:#586e75># If you have more than 1 secret key in your keyring, you may want to</span>
</span></span><span style=display:flex><span><span style=color:#586e75># uncomment the following option and set your preferred keyid.</span>
</span></span><span style=display:flex><span>default-key 28681CB1
</span></span></code></pre></div><p>如果有多个 public key, 也可以删除无用的 key:</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-sh data-lang=sh><span style=display:flex><span><span style=color:#586e75>### 先删除私钥,再删除公钥</span>
</span></span><span style=display:flex><span>$ gpg --yes --delete-secret-keys shenglicao2@gmail.com <span style=color:#586e75>###老的私钥,指明邮箱即可</span>
</span></span><span style=display:flex><span>$ gpg --delete-keys 1808C6444C781C0AEA0AAD4C4D6A8007D20DB8A4
</span></span></code></pre></div><blockquote><p>PS: 最新版本经过实测,本地没有gpg.conf这个文件,因此如果在执行过程中遇到签名失败,可以参考这个文章:https://blog.csdn.net/wenbo20182/article/details/72850810 或 <a href=https://d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors>https://d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors</a></p></blockquote><p>由于公钥服务器没有检查机制,任何人都可以用你的名义上传公钥,所以没有办法保证服务器上的公钥的可靠性。
通常,你可以在网站上公布一个公钥指纹,让其他人核对下载到的公钥是否为真。</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-sh data-lang=sh><span style=display:flex><span><span style=color:#586e75># fingerprint参数生成公钥指纹:</span>
</span></span><span style=display:flex><span>$ gpg --fingerprint liujun
</span></span><span style=display:flex><span>pub rsa4096 2019-10-17 <span style=color:#719e07>[</span>SC<span style=color:#719e07>]</span>
</span></span><span style=display:flex><span> <span style=color:#2aa198>1376</span> A2FF 67E4 C477 <span style=color:#2aa198>5739</span> 09BD 7DB6 <span style=color:#2aa198>8550</span> D366 E4C0
</span></span><span style=display:flex><span>uid <span style=color:#719e07>[</span>ultimate<span style=color:#719e07>]</span> liujun <span style=color:#719e07>(</span>CODE SIGNING KEY<span style=color:#719e07>)</span> &lt;liujun@apache.org&gt;
</span></span><span style=display:flex><span>sub rsa4096 2019-10-17 <span style=color:#719e07>[</span>E<span style=color:#719e07>]</span>
</span></span></code></pre></div><p>登录 <a href=https://id.apache.org>https://id.apache.org</a>, 将上面的 fingerprint (即 1376 A2FF 67E4 C477 5739 09BD 7DB6 8550 D366 E4C0)
粘贴到自己的用户信息中 OpenPGP Public Key Primary Fingerprint</p><h3 id=设置-apache-中央仓库>设置 Apache 中央仓库</h3><p>Dubbo 项目的父 pom 为 Apache pom(2.7.0 以上版本需要,2.6.x 发布版本不需要此操作)</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;parent&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;groupId&gt;</span>org.apache<span style=color:#268bd2>&lt;/groupId&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;artifactId&gt;</span>apache<span style=color:#268bd2>&lt;/artifactId&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;version&gt;</span>19<span style=color:#268bd2>&lt;/version&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/parent&gt;</span>
</span></span></code></pre></div><p>添加以下内容到 .m2/settings.xml
所有密码请使用 <a href=http://maven.apache.org/guides/mini/guide-encryption.html>maven-encryption-plugin</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-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;settings&gt;</span>
</span></span><span style=display:flex><span>...
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;servers&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- To publish a snapshot of some part of Maven --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;server&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;id&gt;</span>apache.snapshots.https<span style=color:#268bd2>&lt;/id&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;username&gt;</span> <span style=color:#586e75>&lt;!-- YOUR APACHE LDAP USERNAME --&gt;</span> <span style=color:#268bd2>&lt;/username&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;password&gt;</span> <span style=color:#586e75>&lt;!-- YOUR APACHE LDAP PASSWORD (encrypted) --&gt;</span> <span style=color:#268bd2>&lt;/password&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/server&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- To stage a release of some part of Maven --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;server&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;id&gt;</span>apache.releases.https<span style=color:#268bd2>&lt;/id&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;username&gt;</span> <span style=color:#586e75>&lt;!-- YOUR APACHE LDAP USERNAME --&gt;</span> <span style=color:#268bd2>&lt;/username&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;password&gt;</span> <span style=color:#586e75>&lt;!-- YOUR APACHE LDAP PASSWORD (encrypted) --&gt;</span> <span style=color:#268bd2>&lt;/password&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/server&gt;</span>
</span></span><span style=display:flex><span> ...
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- gpg passphrase used when generate key --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;server&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;id&gt;</span>gpg.passphrase<span style=color:#268bd2>&lt;/id&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;passphrase&gt;</span><span style=color:#586e75>&lt;!-- yourKeyPassword --&gt;</span><span style=color:#268bd2>&lt;/passphrase&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/server&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/servers&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/settings&gt;</span>
</span></span></code></pre></div><h2 id=打包上传>打包&上传</h2><h3 id=准备分支>准备分支</h3><p>从主干分支拉取新分支作为发布分支,如现在要发布$<code>{release_version}</code>版本,则从2.6.x拉出新分支<code>${release_version}-release</code>,此后<code>${release_version}</code> Release Candidates涉及的修改及打标签等都在<code>${release_version}-release</code>分支进行,最终发布完成后合入主干分支。</p><h3 id=编译打包>编译打包</h3><p>首先,在<code>${release_version}-release</code>分支验证maven组件打包、source源码打包、签名等是否都正常工作。<strong>2.6.x记得要使用1.6进行编译打包</strong></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-shell data-lang=shell><span style=display:flex><span>$ mvn clean install -Prelease
</span></span><span style=display:flex><span>$ mvn deploy
</span></span></code></pre></div><p>上述命令将snapshot包推送到maven中央仓库</p><h3 id=使用mvn-deploy进行deploy>使用mvn deploy进行deploy</h3><blockquote><p>要求:maven 3.5+</p></blockquote><p>修改pom文件中的版本号,从2.7.x-SNAPSHOT改为2.7.x, 目前有3个地方需要修改。建议全文搜索。</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-shell data-lang=shell><span style=display:flex><span>$ mvn clean install -Prelease
</span></span><span style=display:flex><span>$ mvn deploy -Prelease -DskipTests
</span></span></code></pre></div><p>所有被deploy到远程<a href=http://repository.apache.org>maven仓库</a>的Artifacts都会处于staging状态</p><h4 id=注意点>注意点</h4><ul><li>在deploy执行过程中,有可能因为网络等原因被中断,如果是这样,可以重新开始执行。</li><li>deploy执行到maven仓库的时候,请确认下包的总量是否正确。多次出现了包丢失的情况,特别是dubbo-parent包。</li></ul><h2 id=准备apache发布>准备Apache发布</h2><ol><li><p>准备svn本机环境(Apache使用svn托管项目的发布内容)</p></li><li><p>将dubbo checkout到本地目录</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-shell data-lang=shell><span style=display:flex><span>$ svn checkout https://dist.apache.org/repos/dist/dev/dubbo
</span></span><span style=display:flex><span><span style=color:#586e75># 假定本地目录为 ~/apache/dubbo</span>
</span></span></code></pre></div></li><li><p>当前发布版本为${release_version},新建目录</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-shell data-lang=shell><span style=display:flex><span>$ <span style=color:#b58900>cd</span> ~/apache/dubbo <span style=color:#586e75># dubbo svn根目录</span>
</span></span><span style=display:flex><span>$ mkdir <span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>
</span></span></code></pre></div></li><li><p>添加public key到<a href=https://dist.apache.org/repos/dist/dev/dubbo/KEYS>KEYS</a>文件并提交到SVN仓库(第一次做发布的人需要做这个操作,具体操作参考KEYS文件里的说明)。KEYS主要是让参与投票的人在本地导入,用来校验sign的正确性</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-sh data-lang=sh><span style=display:flex><span>$ <span style=color:#719e07>(</span>gpg --list-sigs &lt;your name&gt; <span style=color:#719e07>&amp;&amp;</span> gpg --armor --export &lt;your name&gt;<span style=color:#719e07>)</span> &gt;&gt; KEYS
</span></span></code></pre></div></li><li><p>拷贝<code>dubbo-distribution/dubbo-apache-release/target</code>下的source相关的包到svn本地仓库<code>dubbo/${release_version}</code></p></li><li><p>生成sha512签名和asc签名</p><p>针对<code>src.zip</code> 进行sha512签名</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-shell data-lang=shell><span style=display:flex><span>$ shasum -a <span style=color:#2aa198>512</span> apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-src.zip &gt;&gt; apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-src.zip.sha512
</span></span></code></pre></div><p>针对<code>bin-release.zip</code>,需要增加<code>-b</code>参数,表明是一个二进制文件</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-shell data-lang=shell><span style=display:flex><span>$ shasum -b -a <span style=color:#2aa198>512</span> apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-bin.zip &gt;&gt; apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-bin.zip.sha512
</span></span></code></pre></div><p>针对<code>src.zip</code> 进行asc签名</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-shell data-lang=shell><span style=display:flex><span>$ gpg --armor --output apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-src.zip.asc --detach-sig apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-src.zip
</span></span></code></pre></div></li><li><p>如果有binary release要同时发布</p><p><code>dubbo-distribution/dubbo-apache-release/target</code>目录下,拷贝<code>bin.zip</code>以及<code>bin.zip.asc</code>到svn本地仓库<code>dubbo/${release_version}</code>,参考第6步,生成sha512签名。</p></li><li><p>提交到Apache svn</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-shell data-lang=shell><span style=display:flex><span>$ svn status
</span></span><span style=display:flex><span>$ svn commit -m <span style=color:#2aa198>&#39;prepare for ${release_version} RC1&#39;</span>
</span></span></code></pre></div></li><li><p>关闭Maven的staging仓库</p><p>此步骤为发布2.7.0及以上版本必须要的步骤。在此之前请先确保所有的artifact都是ok的。登录http://repository.apache.org,点击左侧的<code>Staging repositories</code>,然后搜索Dubbo关键字,会出现一系列的仓库,选择你最近上传的仓库,然后点击上方的Close按钮,这个过程会进行一系列检查,检查通过以后,在下方的Summary标签页上出现一个连接,请保存好这个链接,需要放在接下来的投票邮件当中。链接应该是类似这样的: <code>https://repository.apache.org/content/repositories/orgapachedubbo-1015</code></p><blockquote><p>请注意点击Close可能会出现失败,通常是网络原因,只要重试几次就可以了。可以点击Summary旁边的Activity标签来确认。</p></blockquote></li></ol><h2 id=验证release-candidates>验证Release Candidates</h2><p>详细的检查列表请参考官方的<a href=https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist>check list</a></p><p>首先,从一下地址下载要发布的Release Candidate到本地环境:</p><pre>
https://dist.apache.org/repos/dist/dev/dubbo/${release_version}/
</pre><p>然后,开始验证环节,验证包含但不限于以下内容和形式</p><h3 id=检查签名和hash等信息>检查签名和hash等信息</h3><h4 id=检查sha512哈希>检查sha512哈希</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-sh data-lang=sh><span style=display:flex><span>$ shasum -c apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-src.zip.sha512
</span></span><span style=display:flex><span>$ shasum -c apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-bin.zip.sha512
</span></span></code></pre></div><h4 id=检查asc签名>检查asc签名</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>$ gpg --verify apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-src.zip.asc
</span></span></code></pre></div><h4 id=检查gpg签名>检查gpg签名</h4><p>如果是第一次检查,需要首先导入公钥。</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-sh data-lang=sh><span style=display:flex><span> $ curl https://dist.apache.org/repos/dist/dev/dubbo/KEYS &gt;&gt; KEYS <span style=color:#586e75># download public keys to local directory</span>
</span></span><span style=display:flex><span> $ gpg --import KEYS <span style=color:#586e75># import keys</span>
</span></span><span style=display:flex><span> $ gpg —-edit-key liujun
</span></span><span style=display:flex><span> &gt; trust <span style=color:#586e75># type trust command</span>
</span></span></code></pre></div><p>然后使用如下命令检查签名</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-sh data-lang=sh><span style=display:flex><span>gpg --verify apache-dubbo-3.0.4-src.zip.asc apache-dubbo-3.0.4-src.zip
</span></span><span style=display:flex><span>gpg --verify apache-dubbo-3.0.4-bin.zip.asc apache-dubbo-3.0.4-bin.zip
</span></span></code></pre></div><h3 id=检查源码包的文件内容>检查源码包的文件内容</h3><p>解压缩<code>apache-dubbo-${release_version}-src.zip</code>,进行如下检查:</p><ul><li>DISCLAIMER exists</li><li>LICENSE and NOTICE exists and contents are good</li><li>All files and no binary files exist</li><li>All files has standard ASF License header</li><li>Can compile from source</li><li>All unit tests can pass<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-sh data-lang=sh><span style=display:flex><span>mvn clean <span style=color:#b58900>test</span> <span style=color:#586e75># This will run all unit tests</span>
</span></span><span style=display:flex><span><span style=color:#586e75># you can also open rat and style plugin to check if every file meets requirements.</span>
</span></span><span style=display:flex><span>mvn clean <span style=color:#b58900>test</span> -Drat.skip<span style=color:#719e07>=</span><span style=color:#b58900>false</span> -Dcheckstyle.skip<span style=color:#719e07>=</span><span style=color:#b58900>false</span>
</span></span></code></pre></div></li><li>Release candidates match with corresponding tags, you can find tag link and hash in vote email.<ul><li>check the version number in pom.xml are the same</li><li>check there are no extra files or directories in the source package, for example, no empty directories or useless log files,这里需要注意换行符是否一致<br><code>diff -r a rc_dir tag_dir</code></li><li>check the top n tag commits, dive into the related files and check if the source package has the same changes</li></ul></li></ul><h3 id=检查三方依赖的合规性>检查三方依赖的合规性</h3><p>按照Apache基金会合规性规定,源码或者是二进制分发包中均不能包含Category X的依赖,其中就常见的是包含了GPL/LGPL的依赖,即使是传递依赖也不行。因此在发版的时候需要通过以下的命令进行检查:</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-sh data-lang=sh><span style=display:flex><span>mvn license:add-third-party -Dlicense.useMissingFile
</span></span><span style=display:flex><span>find . -name THIRD-PARTY.txt | xargs grep -E <span style=color:#2aa198>&#39;GPL|General Public License&#39;</span> | grep -v Apache | grep -v MIT | grep -v CDDL
</span></span></code></pre></div><p>如果一个依赖提供了双协议或多重协议,可以选择与Apache最兼容的一个协议。</p><p>你可以参考此文章:<a href=https://apache.org/legal/resolved.html>ASF第三方许可证策</a></p><h3 id=检查二进制包的文件内容>检查二进制包的文件内容</h3><p>解压缩<code>apache-dubbo-${release_version}-bin.zip</code>,进行如下检查:</p><ul><li>Check signatures are good</li><li>LICENSE and NOTICE exists and contents are good</li></ul><p>注意,如果二进制包里面引入了第三方依赖,则需要更新LICENSE,加入第三方依赖的LICENSE,如果第三方依赖的LICENSE是Apache 2.0,并且对应的项目中包含了NOTICE,还需要更新NOTICE文件</p><h2 id=进入投票>进入投票</h2><p>dubbo毕业之后,投票分只需要一次:</p><ol><li>Dubbo社区投票,发起投票邮件到dev@dubbo.apache.org。在社区开发者Review,经过至少72小时并统计到3个同意发版的binding票后(只有PMC的票才是binding),即可进入下一阶段的投票。</li></ol><p>Dubbo社区投票邮件模板:</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-text data-lang=text><span style=display:flex><span>Hello Dubbo Community,
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>This is a call for vote to release Apache Dubbo version 2.7.2.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The release candidates:
</span></span><span style=display:flex><span>https://dist.apache.org/repos/dist/dev/dubbo/2.7.2/
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The staging repo:
</span></span><span style=display:flex><span>https://repository.apache.org/content/repositories/orgapachedubbo-1005
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Git tag for the release:
</span></span><span style=display:flex><span>https://github.com/apache/dubbo/tree/dubbo-2.7.2
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Hash for the release tag:
</span></span><span style=display:flex><span>afab04c53edab38d52275d2a198ea1aff7a4f41e
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Release Notes:
</span></span><span style=display:flex><span>https://github.com/apache/dubbo/releases/tag/untagged-4775c0a22c60fca55118
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The artifacts have been signed with Key : 28681CB1, which can be found in the keys file:
</span></span><span style=display:flex><span>https://dist.apache.org/repos/dist/dev/dubbo/KEYS
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The vote will be open for at least 72 hours or until necessary number of votes are reached.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Please vote accordingly:
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[ ] +1 approve
</span></span><span style=display:flex><span>[ ] +0 no opinion
</span></span><span style=display:flex><span>[ ] -1 disapprove with the reason
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Thanks,
</span></span><span style=display:flex><span>The Apache Dubbo Team
</span></span></code></pre></div><p>宣布投票结果模板:</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-text data-lang=text><span style=display:flex><span>We’ve received 3 +1 binding votes and one +1 non-binding vote:
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>+1 binding, Ian Luo
</span></span><span style=display:flex><span>+1 binding, Huxing Zhang
</span></span><span style=display:flex><span>+1 binding, Jun Liu
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>+1 non-binding, Jerrick
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>I will start to release today.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Best regards,
</span></span><span style=display:flex><span>The Apache Dubbo Team
</span></span></code></pre></div><h2 id=正式发布>正式发布</h2><ol><li><a href=https://dist.apache.org/repos/dist/dev/dubbo>dev</a>目录下的发布包添加到<a href=https://dist.apache.org/repos/dist/release/dubbo>release</a>目录下,KEYS有更新的,也需要同步更新。</li><li>删除<a href=https://dist.apache.org/repos/dist/dev/dubbo>dev</a>目录下的发布包</li><li>删除<a href=https://dist.apache.org/repos/dist/release/dubbo>release</a>目录下上一个版本的发布包,这些包会被自动保存在<a href=https://archive.apache.org/dist/dubbo>这里</a></li><li>此步骤为发布2.7.0及以上版本必须要的步骤。在此之前请先确保所有的artifact都是ok的。登录http://repository.apache.org,点击左侧的<code>Staging repositories</code>,然后搜索Dubbo关键字,会出现一系列的仓库,选择你最近上传的仓库,然后点击上方的Release按钮.</li><li>发布GitHub上的<a href=https://github.com/apache/dubbo/releases>release notes</a></li><li>修改GitHub的Readme文件,将版本号更新到最新发布的版本</li><li>在官网下载<a href=/en/blog/2020/05/18/past-releases/>页面</a>上添加最新版本的下载链接。最新的下载链接应该类似<a href="https://www.apache.org/dyn/closer.cgi?path=dubbo/$VERSION/apache-dubbo-$VERSION-source-release.zip">这样</a>. 同时更新以前版本的下载链接,改为类似<code>https://archive.apache.org/dist/dubbo/$VERSION/apache-dubbo-$VERSION-bin-release.zip</code>. 具体可以参考过往的<a href=/en/blog/2020/05/18/past-releases/>下载链接</a> [可以参考] (<a href=https://github.com/apache/dubbo-website/pull/887>https://github.com/apache/dubbo-website/pull/887</a>)</li><li>合并<code>${release-version}-release</code>分支到对应的主干分支, 然后删除相应的release分支,例如: <code>git push origin --delete 2.7.0-release</code></li><li>发邮件到 <code>dev@dubbo.apache.org</code>
宣布release邮件模板:</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-text data-lang=text><span style=display:flex><span>Hello Community,
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The Apache Dubbo team is pleased to announce that the
</span></span><span style=display:flex><span>2.6.6 has just been released.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Apache Dubbo™ is a high-performance, java based, open source
</span></span><span style=display:flex><span>RPC framework. Dubbo offers three key functionalities, which include
</span></span><span style=display:flex><span>interface based remote call, fault tolerance &amp; load balancing, and
</span></span><span style=display:flex><span>automatic service registration &amp; discovery.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Both the source release[1] and the maven binary release[2] are available
</span></span><span style=display:flex><span>now, you can also find the detailed release notes here[3].
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>If you have any usage questions, or have problems when upgrading or find
</span></span><span style=display:flex><span>any problems about enhancements included in this release, please don’t
</span></span><span style=display:flex><span>hesitate to let us know by sending feedback to this mailing list or filing
</span></span><span style=display:flex><span>an issue on GitHub[4].
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[1] https://dubbo.apache.org/en/blog/2020/05/18/past-releases/
</span></span><span style=display:flex><span>[2] https://repo1.maven.org/maven2/org/apache/dubbo/dubbo
</span></span><span style=display:flex><span>[3] https://github.com/apache/dubbo/releases
</span></span><span style=display:flex><span>[4] https://github.com/apache/dubbo/issues
</span></span></code></pre></div><h2 id=完成maven-convenient-binary发布可选>完成Maven Convenient Binary发布(可选)</h2><p><strong>repository.apache.org</strong> nexus仓库的权限已经申请,参见<a href=https://issues.apache.org/jira/browse/INFRA-16451>jira</a></p><p>发布jar包到maven仓库,首先访问<a href=https://repository.apache.org>repository.apache.org</a>, 选择<code>staging repository</code>, 点击<code>release</code>按钮。等待一段时间之后,在<a href=https://repository.apache.org/content/repositories/releases/org/apache/dubbo/>这里</a>确认完整性和正确性. 发布到Maven中央仓库则还需要等待一段时间。可以在<a href=https://repo.maven.apache.org/maven2/org/apache/dubbo>这里</a>进行确认。</p><h2 id=faq>FAQ</h2><h4 id=gpg-signing-failed-inappropriate-ioctl-for-device>gpg: signing failed: Inappropriate ioctl for device</h4><p>If you&rsquo;ve encountered this error, try the following commands:</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-gdscript3 data-lang=gdscript3><span style=display:flex><span><span style=color:#719e07>export</span> GPG_TTY<span style=color:#719e07>=$</span>(tty)
</span></span></code></pre></div><div id=pre-footer><h2>反馈</h2><p class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4 feedback--yes"></button>
<button class="btn btn-primary mb-4 feedback--no"></button></div><script>const yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled"),no.disabled=!0,no.classList.add("feedback--button__disabled")};yes.addEventListener("click",()=>{sendFeedback(1),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")}),no.addEventListener("click",()=>{sendFeedback(0),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")})</script><br><div class="text-muted mt-5 pt-3 border-top">最后修改 March 5, 2024: <a href=https://github.com/apache/dubbo-website/commit/673422f06b83bbe0839c2e917d4e5a5dcb8718a0>:memo: release add asc sig (#2931) (673422f06b8)</a></div></div></main><div class="d-none d-xl-block col-xl-2 td-toc d-print-none"><div class="td-page-meta ml-2 pb-1 pt-2 mb-0"><a href=https://github.com/apache/dubbo-website/edit/master/content/zh-cn/contact/committer/release-guide/java-sdk.md target=_blank><i class="fa fa-edit fa-fw"></i> 编辑此页</a>
<a href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/contact/committer/release-guide/java-sdk.md?filename=change-me.md&amp;value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" target=_blank><i class="fa fa-edit fa-fw"></i> 创建子页面</a>
<a href="https://github.com/apache/dubbo-website/issues/new?title=Java%20SDK%20Release%20%e6%b5%81%e7%a8%8b" target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> 提交项目问题</a></div><nav id=TableOfContents><ul><li><a href=#理解-apache-发布的内容和流程>理解 Apache 发布的内容和流程</a></li><li><a href=#本地构建环境准备>本地构建环境准备</a><ul><li><a href=#安装gpg>安装GPG</a></li><li><a href=#用gpg生成key>用gpg生成key</a></li><li><a href=#查看-key-id>查看 key id</a></li><li><a href=#设置-apache-中央仓库>设置 Apache 中央仓库</a></li></ul></li><li><a href=#打包上传>打包&上传</a><ul><li><a href=#准备分支>准备分支</a></li><li><a href=#编译打包>编译打包</a></li><li><a href=#使用mvn-deploy进行deploy>使用mvn deploy进行deploy</a></li></ul></li><li><a href=#准备apache发布>准备Apache发布</a></li><li><a href=#验证release-candidates>验证Release Candidates</a><ul><li><a href=#检查签名和hash等信息>检查签名和hash等信息</a></li><li><a href=#检查源码包的文件内容>检查源码包的文件内容</a></li><li><a href=#检查三方依赖的合规性>检查三方依赖的合规性</a></li><li><a href=#检查二进制包的文件内容>检查二进制包的文件内容</a></li></ul></li><li><a href=#进入投票>进入投票</a></li><li><a href=#正式发布>正式发布</a></li><li><a href=#完成maven-convenient-binary发布可选>完成Maven Convenient Binary发布(可选)</a></li><li><a href=#faq>FAQ</a><ul><li></li></ul></li></ul></nav></div></div></div></div><footer class="bg-dark py-5 row d-print-none footer-margin-0"><div class="container-fluid mx-sm-5"><div class=row><div class="col-6 col-sm-4 text-xs-center order-sm-2"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Dubbo mailing list archive" aria-label="Dubbo mailing list archive"><a class=text-white target=_blank rel="noopener noreferrer" href=https://lists.apache.org/list.html?dev@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-6 col-sm-4 text-right text-xs-center order-sm-3"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub><a class=text-white target=_blank rel="noopener noreferrer" href=https://github.com/apache/dubbo><i class="fab fa-github"></i></a></li><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Subscribe to mailing list" aria-label="Subscribe to mailing list"><a class=text-white target=_blank rel="noopener noreferrer" href=mailto:dev-subscribe@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-12 col-sm-4 text-center py-2 order-sm-2"><small class=text-white>&copy; 2024 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation. 保留所有权利</small></div></div></div></footer><div class="row pt-2 pb-2 footer-margin-0"><div class="container-fluid mx-sm-5"><div class=text-center id=my-footer><img alt=apache_logo src=/imgs/apache_logo.png><ul><li><a href=https://www.apache.org>Foundation</a></li><li><a href=https://www.apache.org/licenses/>License</a></li><li><a href=https://dubbo.apache.org/en/overview/notices/>Security</a></li><li><a href=https://www.apache.org/events/current-event>Events</a></li><li><a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a></li><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html>Privacy</a></li><li><a href=https://www.apache.org/foundation/thanks.html>Thanks</a></li></ul></div></div></div><script src=/js/popper.min.js integrity=sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49 crossorigin=anonymous></script><script src=/js/bootstrap.min.js integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy crossorigin=anonymous></script><script src=/js/main.min.b075178d232d3b0039b3cb6af2fc2e9d90071820167a60f4eea3a79169975ee8.js integrity="sha256-sHUXjSMtOwA5s8tq8vwunZAHGCAWemD07qOnkWmXXug=" crossorigin=anonymous></script><script async src=https://widget.kapa.ai/kapa-widget.bundle.js data-website-id=d763c4f2-f871-400b-aeca-d986c4af73c2 data-project-name="Apache Dubbo" data-project-color=#E8442E data-button-text="Ask AI" data-search-mode-enabled=true data-modal-open-on-command-k=true data-modal-disclaimer="The AI supports multiple languages, but it may not be accessible in China due to recaptcha, a proxy is required." data-project-logo=https://pbs.twimg.com/profile_images/1011849068283191302/FJbH5vbF_400x400.jpg data-modal-example-questions="What is Apache Dubbo?,How to run Apache Dubbo?" data-button-position-top data-button-position-right=20px data-button-position-bottom=200px data-button-position-left></script><script>(function(e,t,n,s){e[s]=e[s]||[];var a=t.getElementsByTagName(n)[0],i=t.createElement(n);i.async=!0,i.id="beacon-aplus",i.setAttribute("exparams","userid=&aplus&sidx=aplusSidex&ckx=aplusCkx"),i.src="//g.alicdn.com/alilog/mlog/aplus_v2.js",i.crossorigin="anonymous",a.parentNode.insertBefore(i,a)})(window,document,"script","aplus_queue"),function(e){var t=e.createElement("script");t.type="text/javascript",t.async=!0,t.src="//g.alicdn.com/aes/??tracker/3.3.4/index.js,tracker-plugin-pv/3.0.5/index.js,tracker-plugin-event/3.0.0/index.js,tracker-plugin-autolog/3.0.3/index.js,tracker-plugin-survey/3.0.3/index.js,tracker-plugin-jserror/3.0.3/index.js,tracker-plugin-resourceError/3.0.3/index.js",t.onload=function(){window.AES_CONFIG=window.AES_CONFIG||{env:"prod"},window.aes=new AES({pid:"zN245h",user_type:6}),window.AESPluginAutologConfig={exposure:"auto"},window.AEMPluginInstances=[aes.use(AESPluginPV,window.AESPluginPVConfig||{enableHistory:!0}),aes.use(AESPluginEvent,window.AESPluginEventConfig||{}),aes.use(AESPluginSurvey,window.AESPluginEventConfig||{}),aes.use(AESPluginAutolog,window.AESPluginAutologConfig||{}),aes.use(AESPluginJSError,window.AESPluginJSError||{}),aes.use(AESPluginResourceError,window.AESPluginResourceError||{})]},setTimeout(function(){e.getElementsByTagName("body")[0].appendChild(t)},800)}(document)</script></body></html>