gradle 打包jar上傳到nexus 同時上傳源碼jar

上一篇:Spring整合Mybatis實現(xiàn)一個簡單的分頁查詢功能

以我們實際項目為例,項目中后臺和前臺單獨開發(fā),之間通過dubbo接口調(diào)用,后臺提供服務(wù)接口,具體實現(xiàn)對前臺隱藏,前臺使用某個服務(wù)時,下載相應(yīng)依賴然后調(diào)用,因此需要將服務(wù)接口打成jar包,上傳到倉庫中,供前臺下載。

服務(wù)接口

以上圖為例,需要將紅框中的包單獨打包成jar包,前臺需要某個服務(wù),則下載相應(yīng)依賴,本文以上傳base包為例。

上傳jar包到nexus倉庫,可以使用maven-publish插件,具體可以參考:https://docs.gradle.org/current/userguide/publishing_maven.html

上傳classjar包

apply plugin: "java"
apply plugin: "maven-publish"

//設(shè)置動態(tài)屬性
ext {
    //發(fā)布到倉庫用戶名
    publishUserName = "123"
    //發(fā)布到倉庫地址
    publishUserPassword = "123"
    //倉庫地址
    publishURL="http://196.10.149.149:8080/nexus/content/repositories/snapshots/"
    
    apiBaseJarName = "gcf-dubbo-api-base"
    apiBaseJarVersion = '1.6.gome-SNAPSHOT'
    builtBy="gradle 1.9"
}
//jar包名稱組成:[baseName]-[appendix]-[version]-[classifier].[extension]
//打包class文件
task apiBaseJar(type:Jar){
     version apiBaseJarVersion
     baseName apiBaseJarName
     from sourceSets.main.output
     destinationDir file("$buildDir/api-libs")
     includes ['com/ai/gcf/api/base/**']
     manifest {
         attributes 'packageName': apiBaseJarName, 'Built-By': builtBy,'Built-date': new Date().format('yyyy-MM-dd HH:mm:ss'),'Manifest-Version':version
     }
 }

 //上傳jar包
 publishing {
     publications {
         publishing.publications.create('apiBase', MavenPublication) {
             groupId 'com.ai.gcf.api'
             artifactId apiBaseJarName
             version apiBaseJarVersion
             artifact apiBaseJar
         }
     }
     repositories {
         maven {
             url  publishURL
             credentials {
                 username = publishUserName
                 password = publishUserPassword
             }
         }
     }
 }
 

上面就將base包下的class文件打成jar包上傳到nexus倉庫了。

但是怎么將源碼一塊上傳上去呢,就像其他開源包一樣,使用者下載某個jar包時同時下載下來他的源碼包?

首先咱們看下其他開源包在nexus上面的結(jié)構(gòu),以fastjson為例:


fastjson

在1.2.14版本下面有兩個jar包,分別是fastjson-1.2.14.jar和fastjson-1.2.14-sources.jar,接著看下這兩個jar包的maven構(gòu)建區(qū)別:

fastjson-1.2.14.jar

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.14</version>
</dependency>

fastjson-1.2.14-sources.jar

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.14</version>
  <classifier>sources</classifier>
</dependency>

上面兩者的唯一區(qū)別就是源碼包增加了classifier,所以照貓畫虎,我們也上傳一個源碼包,名稱叫xxx-sources.jar。

完整build.gradle文件如下:

apply plugin: "java"
apply plugin: "maven-publish"

//設(shè)置動態(tài)屬性
ext {
    //發(fā)布到倉庫用戶名
    publishUserName = "123"
    //發(fā)布到倉庫地址
    publishUserPassword = "123"
    //倉庫地址
    publishURL="http://196.10.149.149:8080/nexus/content/repositories/snapshots/"
    
    apiBaseJarName = "gcf-dubbo-api-base"
    apiBaseJarVersion = '1.6.gome-SNAPSHOT'
    builtBy="gradle 1.9"
}
//jar包名稱組成:[baseName]-[appendix]-[version]-[classifier].[extension]
//打包class文件
task apiBaseJar(type:Jar){
     version apiBaseJarVersion
     baseName apiBaseJarName
     from sourceSets.main.output
     destinationDir file("$buildDir/api-libs")
     includes ['com/ai/gcf/api/base/**']
     manifest {
         attributes 'packageName': apiBaseJarName, 'Built-By': builtBy,'Built-date': new Date().format('yyyy-MM-dd HH:mm:ss'),'Manifest-Version':version
     }
 }
//打包源碼
 task apiBaseSourceJar(type:Jar){
     version apiBaseJarVersion
     baseName apiBaseJarName
     classifier "sources"
     from sourceSets.main.allSource
     destinationDir file("$buildDir/api-libs")
     includes ['com/ai/gcf/api/base/**']
     manifest {
         attributes 'packageName': apiBaseJarName+'-sources', 'Built-By': builtBy,'Built-date': new Date().format('yyyy-MM-dd HH:mm:ss'),'Manifest-Version':version
     }
 }
 //上傳jar包
 publishing {
     publications {
         publishing.publications.create('apiBase', MavenPublication) {
             groupId 'com.ai.gcf.api'
             artifactId apiBaseJarName
             version apiBaseJarVersion
             //同時上傳class包和源碼包
             artifacts = [apiBaseJar,apiBaseSourceJar]
         }
     }
     repositories {
         maven {
             url  publishURL
             credentials {
                 username = publishUserName
                 password = publishUserPassword
             }
         }
     }
 }
 

在命令行cd到當前項目路徑,執(zhí)行命令gradle tasks,會發(fā)現(xiàn)多了紅框中的5個task.

publishing.png

執(zhí)行g(shù)radle publishApiBasePublicationToMavenRepository上傳class包和源碼成功。

apibase在nexus中的結(jié)構(gòu)

上傳成功后在nexus中的結(jié)構(gòu),現(xiàn)在使用者就可以在項目的build.gradle添加該jar包的依賴了,這樣下載該包class時也會下載他的源碼包。

compile('com.ai.gcf.api:gcf-dubbo-api-base:1.6.gome-SNAPSHOT')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評論 25 709
  • 《我的前半生》大熱。劇中,唐晶和羅子青代表了現(xiàn)代女性的兩種極端”,一個精明能干、職場女強人,一個小鳥依人似的家庭主...
    風鈴兒響叮當閱讀 397評論 0 0
  • 昨天,感賞老公尊重孩子,兒子答應(yīng)購買英語課程. 下面是父子二人的對話: 爸爸:我聽了講座,感覺很好,適合你.里面含...
    玫瑰鏗鏘閱讀 900評論 5 3

友情鏈接更多精彩內(nèi)容