Maven作为目前Java界最好的Dependency管理系统,把jar包托管到Maven中央库,然后通过Maven Dependency使用是目前业界各种第三方库的普遍做法,如果,你想把自己开发的一些库分享给别人使用,也可以遵循这样的套路。Gradle可以看做是升级版的Maven,其使用了Maven最优秀的Dependency管理系统,但是,又规避了Maven的build pipeline的刻板和xml格式配置文件等缺点,可以说是目前Java界最好的构建工具。下面就来说说,如何使用Gradle把自己开发的jar包部署到Maven中央库中。
Part 1: 为自己的项目注册Maven中央库账号
在注册账号,(注:Sonatype是Maven中央库的管理系统),注册之后获得用户名,密码。后面的build脚本会用得上。
在Sonatype的JIRA系统中,创建一个issue(选择Project: Community Support - Open Source Project Repository Hosting; Issue Type: New Project),告诉Sonatype管理员,你想托管一个项目到Sonatype上。注意该Issue创建完之后,只有管理员有更改权限,因此,小心不要写错信息
创建完之后,需要等待Sonatype管理员审核,一般不超过2个工作日,一旦审核通过,会在该Issue上标明Resolved,这就是说中央库已经准备好,可以随时上传自己的文件了。
Part 2: Maven中央库托管规范
为了构建更加良好的Maven生态环境,Maven对于托管到其上的库有非常明确的质量要求: * 项目的Pom文件必须包含如下元素: * 如果部署的是jar包且jar包里面有java classes,那么除了jar包外,还必须上传该jar包的源代码包,javadoc包,即必须部署三个包.jar/-sources.jar/ **-javadoc.jar。 * 所有要部署的包都必须使用GPG签名,签名证书的Public Key必须上传到hkp://pool.sks-keyservers.net/ 服务器上。 More Info Maven Central Requirementhttps://docs.sonatype.org/display/Repository/Central+Sync+Requirements
Part 3: GPG签名
前面提到,所有要上传到Maven中央库的文件都需要做签名,首先,需要下载GPG工具(https://gpgtools.org/)。 Mac用户可以直接下载带UI的工具GPGTools Installer https://s3.amazonaws.com/gpgtools/GPGTools-20130330.dmg,安装完之后,直接生成新的证书,然后Send Public Key to Key Server就行了。非常简单。 如果你是命令行控,请参考Gennerate GPG signature With Maven https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven
Part 4: Gradle 脚本
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'signing' //使用signing plugin做数字签名
//定义GroupID和Version,ArtefactID会自动使用Project名
group = 'com.thoughtworks.toggle'
version = '0.1.0-SNAPSHOT'
sourceCompatibility = 1.6
targetCompatibility = 1.6
repositories {
mavenCentral();
}
dependencies {
compile(
'junit:junit:4.11',
)
}
uploadArchives {
repositories {
mavenDeployer {
//为Pom文件做数字签名
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
//指定项目部署到的中央库地址,UserName和Password就是Part 1中注册的账号。
repository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
authentication(userName: sonatypeUsername, password: sonatypePassword)
}
//构造项目的Pom文件,参见Part 2中Pom文件的规范,不要遗漏必填项
pom.project {
name project.name
packaging 'jar'
description 'Toggle is a little java tool to make your life easier when you try to use Feature Toggle in Java.'
url 'https://github.com/xianlinbox/Toggle'
scm {
url 'scm:git@github.com:xianlinbox/Toggle.git'
connection 'scm:git@github.com:xianlinbox/Toggle.git'
developerConnection 'git@github.com:xianlinbox/Toggle.git'
}