使用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 腳本
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」就成功了
相關文章
相關標籤/搜索