共计 4233 个字符,预计需要花费 11 分钟才能阅读完成。
Maven 作为目前 Java 界最好的 Dependency 管理系统,把 jar 包托管到 Maven 中央库,然后通过 Maven Dependency 使用是目前业界各种第三方库的普遍做法,如果,你想把自己开发的一些库分享给别人使用,也可以遵循这样的套路。Gradle 可以看做是升级版的 Maven,其使用了 Maven 最优秀的 Dependency 管理系统,但是,又规避了 Maven 的 build pipeline 的刻板和 xml 格式配置文件等缺点,可以说是目前 Java 界最好的构建工具。下面就来说说,如何使用 Gradle 把自己开发的 jar 包部署到 Maven 中央库中。
Part 1: 为自己的项目注册 Maven 中央库账号
在 http://oss.sonatype.orgz 注册账号,(注: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’
}
licenses {
license {
name ‘The Apache Software License, Version 2.0’
url ‘http://www.apache.org/licenses/LICENSE-2.0.txt’
distribution ‘repo’
}
}
developers {
developer {
id ‘xianlinbox’
name ‘Liu Xiannings’
}
}
}
}
}
}
// 参见 Part 2,为项目生成 **.jar/**-javadoc.jar/**-sources.jar
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = ‘javadoc’
from ‘build/docs/javadoc’
}
task sourcesJar(type: Jar) {
classifier = ‘sources’
from sourceSets.main.allSource
}
artifacts {
archives jar
archives javadocJar
archives sourcesJar
}
// 为所有的 jar 包做数字签名
signing {
sign configurations.archives
}
Part 5: 遇到过的问题
1. java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
这个问题只有在使用的是 OpenJDK 的时候才会遇到,原因是 OpenJDK 的包里面没有带有效的证书,在 MacOS 上,只要把系统库里带的 cacerts 给它关联过去就行了。
cd $(/usr/libexec/java_home -v 1.7)/jre/lib/security
ln -fsh /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
2.Return Code is 400
这个问题有一段心酸的过程,有兴趣的可以看一下这个 issue :issue fixed process 在部署过程中收到这个 Error Message 的情况有 2 种:* 重复部署同一个 jar 包到 Maven 库,但是,Maven 库却设置为不允许重复部署,在 Gradle 1.0 版本的 MavenDeployer 就有这个问题,会重复提交 jar 包,不过已经在 1.1 版本修复。* 试图部署一个 release 版本的 jar 包到 snapshot 库。我的情况是后者,不过 Root Cause 比较汗颜,因为我把 version number 写成了“0.1.0-snapshot”, 不符合 Maven 对 Snapshot 包的规范,因此,被当做 release 版本了,修改为“0.1.0-SNAPSHOT”就成功了
Maven 权威指南_中文完整版清晰 PDF http://www.linuxidc.com/Linux/2014-06/103690.htm
Maven 3.1.0 发布,项目构建工具 http://www.linuxidc.com/Linux/2013-07/87403.htm
Linux 安装 Maven http://www.linuxidc.com/Linux/2013-05/84489.htm
Maven3.0 配置和简单使用 http://www.linuxidc.com/Linux/2013-04/82939.htm
Ubuntu 下搭建 sun-jdk 和 Maven2 http://www.linuxidc.com/Linux/2012-12/76531.htm
Maven 使用入门 http://www.linuxidc.com/Linux/2012-11/74354.htm