gradle 上传jar包_gradle 打包jar上传到nexus 同时上传源码jar
以我們實際項目為例,項目中后臺和前臺單獨開發,之間通過dubbo接口調用,后臺提供服務接口,具體實現對前臺隱藏,前臺使用某個服務時,下載相應依賴然后調用,因此需要將服務接口打成jar包,上傳到倉庫中,供前臺下載。
服務接口
以上圖為例,需要將紅框中的包單獨打包成jar包,前臺需要某個服務,則下載相應依賴,本文以上傳base包為例。
上傳classjar包
apply plugin: "java"
apply plugin: "maven-publish"
//設置動態屬性
ext {
//發布到倉庫用戶名
publishUserName = "123"
//發布到倉庫地址
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上面的結構,以fastjson為例:
fastjson
在1.2.14版本下面有兩個jar包,分別是fastjson-1.2.14.jar和fastjson-1.2.14-sources.jar,接著看下這兩個jar包的maven構建區別:
fastjson-1.2.14.jar
com.alibaba
fastjson
1.2.14
fastjson-1.2.14-sources.jar
com.alibaba
fastjson
1.2.14
sources
上面兩者的唯一區別就是源碼包增加了classifier,所以照貓畫虎,我們也上傳一個源碼包,名稱叫xxx-sources.jar。
完整build.gradle文件如下:
apply plugin: "java"
apply plugin: "maven-publish"
//設置動態屬性
ext {
//發布到倉庫用戶名
publishUserName = "123"
//發布到倉庫地址
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到當前項目路徑,執行命令gradle tasks,會發現多了紅框中的5個task.
publishing.png
執行gradle publishApiBasePublicationToMavenRepository上傳class包和源碼成功。
apibase在nexus中的結構
上傳成功后在nexus中的結構,現在使用者就可以在項目的build.gradle添加該jar包的依賴了,這樣下載該包class時也會下載他的源碼包。
compile('com.ai.gcf.api:gcf-dubbo-api-base:1.6.gome-SNAPSHOT')
總結
以上是生活随笔為你收集整理的gradle 上传jar包_gradle 打包jar上传到nexus 同时上传源码jar的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse mysql5.7_MyS
- 下一篇: 浮层java_css保持浮层水平垂直居中