不少朋友都给我提过一样的建议:java
建议把 Smart 的 jar 包放到 Maven 中央仓库吧!放在 OSC Maven 里我下载不到。git
须要澄清的是,并非从 OSC Maven 下载不到 Smart 构件,而是这些构件属于第三方构件,存放在 OSC Maven 的第三方仓库里,因此咱们须要在 pom.xml 或 setting.xml 里配置:apache
<!-- lang: xml --> <repository> <id>osc_thirdparty</id> <url>http://maven.oschina.net/content/repositories/thirdparty/</url> </repository>
然而,不少朋友并不知道须要这样配置,因此就产生了那个建议。服务器
此外,须要注意的是,OSC Maven 的第三方仓库只能存放 RELEASE 构件,而不能存放 SNAPSHOT 构件。jsp
为了让你们可以更方便的使用 Smart,我作了一个慎重的决定:将 Smart 构件发布到 Maven 中央仓库中!maven
将构件放入中央仓库是一件很是麻烦的事情,须要作不少准备工做,我会尽量有条理地展示每一个步骤,就是为了让你们少走弯路,节省更多的时间,去作更重要的事情。ide
如今就开始吧!工具
说到中央仓库,不得不说 Sonatype 这家公司,由于中央仓库就是这家公司砸钱搞的,而且免费向全球全部的 Java 开发者提供构件托管服务,这对于咱们而言,简直就是“福利”啊!网站
Sonatype 官网:http://www.sonatype.org/ui
对于向我这样的新手而言,第一次将构件发布到中央仓库,真的不是一件很是轻松的事情,因此如今很是有必要把些步骤记下来,这样能够节省你们的时间,作更多重要的事情。
具体的操做步骤以下:
这里的用户名与密码是很是重要的,后面会用到,必定要保存好。
此外,Sonatype 还提供了一个名为 OSS 的系统:
Sonatype OSS:https://oss.sonatype.org
在 OSS 中能够查询到全世界已发布的构件,固然它还有另一个做用,后面会提到。
Issue 地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134
此时,至关于提交一个申请。其中,最重要的信息就是 groupId 了,对于这个 groupId,我必要多说几句:
由于个人 Smart 项目源码托管在 OSC Git 上,其域名为 oschina.net,因此 Smart 的 groupId 应该是 net.oschina.huangyong。很明显,这种 groupId 不是我想要的,因此我须要购买一个属于 Smart 的域名。
由于 Smart 是一个开源项目,属于非盈利组织,因此域名后缀应该是 org 的,因而第一反应是想买 smart.org 域名。在 万网 上查询了一下,发现这个域名已经被人买了,没办法,只能换一个域名了。经你们一番讨论后,决定 Smart 的域名为 smart4j.org,在万网上的价格是 139 元/年。经 大漠 的推荐,最后在 GoDaddy 上以 87 元/年的价格购买了该域名,在 GoDaddy 上是可使用支付宝交易的。
这样一来,Smart 在中央仓库里就能够申请到名为 org.smart4j 的 groupId 了。
通常须要 1 ~ 2 天时间,须要耐心等候,审批经过后会发邮件通知,此外,在本身提交的 Issue 下面会看到 Sonatype 工做人员的回复。
若是是 Windows 操做系统,须要下载 Gpg4win 软件来生成密钥对。建议你们下载 Gpg4win-Vanilla 版本,由于它仅包括 GnuPG,这个工具才是咱们所须要的。
安装 GPG 软件后,打开命令行窗口,依次作如下操做:
gpg --version
可以显示 GPG 的版本信息,说明安装成功了。
gpg --gen-key
此时须要输入姓名、邮箱等字段,其它字段可以使用默认值,此外,还须要输入一个 Passphase,至关于一个密钥库的密码,必定不要忘了,也不要告诉别人,最好记下来,由于后面会用到。
gpg --list-keys
输出以下信息:
C:/Users/huangyong/AppData/Roaming/gnupg/pubring.gpg ---------------------------------------------------- pub 2048R/82DC852E 2014-04-24 uid hy_think <hy_think@163.com> sub 2048R/3ACA39AF 2014-04-24
可见这里的公钥的 ID 是:82DC852E,很明显是一个 16 进制的数字,立刻就会用到。
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 82DC852E
此后,可以使用本地的私钥来对上传构件进行数字签名,而下载该构件的用户可经过上传的公钥来验证签名,也就是说,你们能够验证这个构件是否由本人上传的,由于有可能该构件被坏人给篡改了。
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 82DC852E
实际上就是从 key server 上经过公钥 ID 来接收公钥,此外,也能够到 sks-keyservers.net 上经过公钥 ID 去查询。
须要修改的 Maven 配置文件包括:setting.xml(全局级别)与 pom.xml(项目级别)。
<!-- lang: xml --> <settings> ... <servers> <server> <id>oss</id> <username>用户名</username> <password>密码</password> </server> </servers> ... </settings>
使用本身注册的 Sonatype 帐号的用户名与密码来配置以上 server 信息。
<!-- lang: xml --> <project> ... <name>smart</name> <description>Smart is a lightweight Java Web Framework and reusable components.</description> <url>http://www.smart4j.org/</url> <licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> </license> </licenses> <developers> <developer> <name>huangyong</name> <email>huangyong.java@gmail.com</email> </developer> </developers> <scm> <connection>scm:git:git@git.oschina.net:huangyong/smart.git</connection> <developerConnection>scm:git:git@git.oschina.net:huangyong/smart.git</developerConnection> <url>git@git.oschina.net:huangyong/smart.git</url> </scm> ... <profiles> <profile> <id>release</id> <build> <plugins> <!-- Source --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> <!-- Javadoc --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <!-- GPG --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.5</version> <executions> <execution> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <distributionManagement> <snapshotRepository> <id>oss</id> <url>https://oss.sonatype.org/content/repositories/snapshots/</url> </snapshotRepository> <repository> <id>oss</id> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement> </profile> </profiles> ... </project>
注意:以上 pom.xml 必须包括:name、description、url、licenses、developers、scm 等基本信息,此外,使用了 Maven 的 profile 功能,只有在 release 的时候,建立源码包、建立文档包、使用 GPG 进行数字签名。此外,snapshotRepository 与 repository 中的 id 必定要与 setting.xml 中 server 的 id 保持一致。
mvn clean deploy -P release
当执行以上 Maven 命令时,会自动弹出一个对话框,须要输入上面提到的 Passphase,它就是经过 GPG 密钥对的密码,只有本身才知道。随后会看到大量的 upload 信息,并且速度比较慢,常常会 timeout,须要反复尝试。
注意:此时上传的构件并未正式发布到中央仓库中,只是部署到 OSS 中了,下面才是真正的发布。
在 OSS 中,使用本身的 Sonatype 帐号登陆后,可在 Staging Repositories 中查看刚才已上传的构件,这些构件目前是放在 Staging 仓库中,可进行模糊查询,快速定位到本身的构件。此时,该构件的状态为 Open,须要勾选它,而后点击 Close 按钮。接下来系统会自动验证该构件是否知足指定要求,当验证完毕后,状态会变为 Closed,最后,点击 Release 按钮来发布该构件。
须要在曾经建立的 Issue 下面回复一条“构件已成功发布”的评论,这是为了通知 Sonatype 的工做人员为须要发布的构件作审批,发布后会关闭该 Issue。
没错,仍是要等,也许又是 1 ~ 2 天。一样,当审批经过后,将会收到邮件通知。
最后,就能够到中央仓库中搜索到本身发布的构件了!
中央仓库搜索网站:http://search.maven.org/
最后,想说一句:第一次都是很痛的,之后就舒服了。没错,只有第一次发布才如此痛苦,之后 deploy 的构件会自动部发布到中央仓库,无需再这样折腾了。
至此,Smart 构件已成功发布到中央仓库,如今可在你的代码中直接配置 Smart 依赖了。
例如:依赖 Smart Framework,你能够这样配置:
<!-- lang: xml --> <dependency> <groupId>org.smart4j</groupId> <artifactId>smart-framework</artifactId> <version>2.2</version> </dependency>
最后,感谢 Dead_knight 与 悠悠然然 的经验分享!
Smart 系列博文:http://my.oschina.net/huangyong/blog/158380
https://docs.sonatype.org/display/Repository/Choosing+your+Coordinates
https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide