使用Gradle部署jar包到Maven中央库

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 Requirement https://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 脚本  
Java代码   收藏代码
  1. apply plugin: 'idea'  
  2. apply plugin: 'java'  
  3. apply plugin: 'maven'  
  4. apply plugin: 'signing' //使用signing plugin做数字签名  
  5.   
  6. //定义GroupID和Version,ArtefactID会自动使用Project名  
  7. group = 'com.thoughtworks.toggle'  
  8. version = '0.1.0-SNAPSHOT'  
  9. sourceCompatibility = 1.6  
  10. targetCompatibility = 1.6  
  11.   
  12. repositories {  
  13.     mavenCentral();  
  14. }  
  15.   
  16. dependencies {  
  17.     compile(  
  18.             'junit:junit:4.11',  
  19.     )  
  20. }  
  21.   
  22. uploadArchives {  
  23.     repositories {  
  24.         mavenDeployer {  
  25.             //为Pom文件做数字签名  
  26.             beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }  
  27.   
  28.             //指定项目部署到的中央库地址,UserName和Password就是Part 1中注册的账号。  
  29.             repository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {  
  30.                 authentication(userName: sonatypeUsername, password: sonatypePassword)  
  31.             }  
  32.             //构造项目的Pom文件,参见Part 2中Pom文件的规范,不要遗漏必填项  
  33.             pom.project {  
  34.                 name project.name  
  35.                 packaging 'jar'  
  36.                 description 'Toggle is a little java tool to make your life easier when you try to use Feature Toggle in Java.'  
  37.                 url 'https://github.com/xianlinbox/Toggle'  
  38.   
  39.                 scm {  
  40.                     url 'scm:git@github.com:xianlinbox/Toggle.git'  
  41.                     connection 'scm:git@github.com:xianlinbox/Toggle.git'  
  42.                     developerConnection 'git@github.com:xianlinbox/Toggle.git'  
  43.                 }  
  44.   
  45.                 licenses {  
  46.                     license {  
  47.                         name 'The Apache Software License, Version 2.0'  
  48.                         url 'http://www.apache.org/licenses/LICENSE-2.0.txt'  
  49.                         distribution 'repo'  
  50.                     }  
  51.                 }  
  52.   
  53.                 developers {  
  54.                     developer {  
  55.                         id 'xianlinbox'  
  56.                         name 'Liu Xiannings'  
  57.                     }  
  58.                 }  
  59.             }  
  60.         }  
  61.     }  
  62. }  
  63.   
  64. //参见Part 2, 为项目生成**.jar/**-javadoc.jar/**-sources.jar  
  65. task javadocJar(type: Jar, dependsOn: javadoc) {  
  66.     classifier = 'javadoc'  
  67.     from 'build/docs/javadoc'  
  68. }  
  69.   
  70. task sourcesJar(type: Jar) {  
  71.     classifier = 'sources'  
  72.     from sourceSets.main.allSource  
  73. }  
  74.   
  75. artifacts {  
  76.     archives jar  
  77.     archives javadocJar  
  78.     archives sourcesJar  
  79. }  
  80.   
  81. //为所有的jar包做数字签名  
  82. signing {  
  83.     sign configurations.archives  
  84. }  


Part 5: 遇到过的问题  

1. java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 
这个问题只有在使用的是OpenJDK的时候才会遇到,原因是OpenJDK的包里面没有带有效的证书,在MacOS上,只要把系统库里带的cacerts给它关联过去就行了。 
Java代码   收藏代码
  1. cd $(/usr/libexec/java_home -v 1.7)/jre/lib/security  
  2. 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”就成功了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值