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

以上圖為例,需要將紅框中的包單獨打包成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為例:

在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.

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

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