天天看點

gradle打包_gradle打包釋出到maven的nexus倉庫前提背景以前的解決方案及問題新的打包方案

gradle打包_gradle打包釋出到maven的nexus倉庫前提背景以前的解決方案及問題新的打包方案

前提背景

公司要封裝一個工具類,把常用的mybatis,apollo,redis,初始化運作檢查等等都封裝在一起,項目建好了,但是打包釋出nexus之後,别的項目死活拉不到依賴包,經查,是gradle打包時生成的pom檔案中沒有加入子產品依賴.

以前的解決方案及問題

以前公司用gradle打包的時候,先建立一個maven_push.gradle ,然後在要打包的子產品build.gradle中加上一句

apply from: '../maven_push.gradle'
           

maven_push.gradle的内容如下:

// The Maven plugin adds support for deploying artifacts to Maven repositories.// 一個可以讓你把庫上傳到maven倉庫的插件apply plugin: 'maven'// The signing plugin adds the ability to digitally sign built files and artifacts. These digital signatures can then be used to prove who built the artifact the signature is attached to as well as other information such as when the signature was generated.// 對庫檔案進行數字簽名的插件,可以通過簽名知道誰建立了這個庫檔案,簽名的時間等等資訊apply plugin: 'signing'// 聲明變量記錄maven庫位址def mavenRepositoryUrl// 判斷是釋出到正式庫,還是snapshots庫if (isReleaseBuild()) {    println 'RELEASE BUILD'    // 下面的庫位址指向的是我們私有倉庫的Releases 倉庫    mavenRepositoryUrl = "http://xxx.com/repository/maven-public/"} else {    println 'SNAPSHOTS BUILD'    // 下面的庫位址指向的是我們私有倉庫的snapshots 倉庫    mavenRepositoryUrl = "http://xxxx.com/repository/maven-snapshots/"}// 根據我們在likelib下gradle.properties中聲明的版本名稱,來分辨是Release版本還是 snapshots版本def isReleaseBuild() {    return !VERSION_NAME.contains("SNAPSHOT");}afterEvaluate { project ->    // 我們聲明我們要執行的上傳到maven的task    uploadArchives {        repositories {            mavenDeployer {                beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }                // 我們類比下compile com.squareup.okhttp:okhttp:2.7.0                // artifactId 對應com.squareup.okhttp; groupId 對應okhttp;version對應2.7.0                // 這樣就類似坐标的方式定位到了制定的庫檔案                pom.artifactId = POM_ARTIFACT_ID                pom.groupId = POM_GROUP_ID                pom.version = VERSION_NAME                // 授權驗證,這裡也就是你登陸搭建的私服伺服器時候的使用者名\密碼                repository(url: mavenRepositoryUrl) {                    authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())                }                // 這裡是配置我們maven庫需要的pom.xml檔案的各個内容,具體意思我們在主目錄gradle.properties中解釋                pom.project {                    name POM_NAME                    packaging POM_PACKAGING                    description POM_DESCRIPTION                    url POM_URL                }            }        }    }    // 進行數字簽名    signing {        required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }        sign configurations.archives    }}
           

這樣是可以打包,但是對子產品依賴就沒辦法打包,如gradle依賴配置如下:

dependencies {  compile project(":tools-mybatis")  compile project(":tools-ops")}
           

但打包出來的pom.xml檔案裡面并沒有這兩個依賴.

新的打包方案

上述通過 maven 插件可能還有别的姿試可以打包,但是沒有找到,通過查找官方文檔,找到了以下解決方案引入 maven-publish,這個plugin , 然後在子產品build.gradle中加入配置:

publishing {  publications {    maven(MavenPublication) {      groupId = group      artifactId = 'tools-starter'      version = version      from components.java    }  }  repositories {    maven { url "http://xxxx.com/repository/maven-snapshots/"      credentials {        username 'xxx'        password 'xxxx'      }    }  }}
           

這樣就可以通過Idea右邊gradle工具欄的插件菜單來釋出了

gradle打包_gradle打包釋出到maven的nexus倉庫前提背景以前的解決方案及問題新的打包方案

這樣生成的pom.xml中是包含這兩個依賴的.

更多文章請點選檢視原文

繼續閱讀