一、maven-publish介紹
在 Gradle 1.3 中,引入了一種新的發布機制。這種新機制引入了一些新概念和功能,這些功能使 Gradle 發布變得更加強大,現在已成為發布工件的首選選項。
二、maven-publish使用
1、在 build.gradle 聲明插件
plugins { id 'maven-publish' }
2、使用publishing{}塊進行配置
group = 'org.example' version = '1.0' publishing { publications { myLibrary(MavenPublication) { from components.java } } repositories { mavenLocal() } }
上面我們定義了一個名為myLibrary的publication,from components.java這句表明是一個java庫,也就是最終會以jar包的形式發布。還定義了一個本地maven倉庫,表明myLibrary的jar包最終會被發布到本地maven倉庫。components定義了發布的組件,支持三個值:components.java(由JavaPlugin添加)、components.web(由WarPlugin添加)、components.javaPlatform(由JavaPlatformPlugin添加)。如果我們需要將一個web項目打包成war包發布,則使用components.web。我們當前的例子為jar,則使用components.java。
Gradle使用與Maven相同的邏輯來標識本地Maven緩存的位置。如果在settings.xml中定義了本地Maven倉庫位置,那么Gradle將使用這個位置。USER_HOME/.m2下的settings.xml將會覆蓋M2_HOME/conf中的settings.xml。如果沒有可獲取的settings.xml,Gradle將默認使用USER_HOME/.m2/repository作為本地Maven倉庫位置。
3、maven-publish提供的tasks
maven-publish提供了如下tasks:
任務 | 描述 |
generatePomFileForPubNamePublication | 創建需要發布的名為PubName的POM文件,填充已知的元數據,如項目名稱、項目版本和依賴項。POM文件的默認位置是build/publications/$pubName/pom-default.xml. |
publishPubNamePublicationToRepoNameRepository | 將PubName發布到名為RepoName的存儲庫。如果你有一個沒有顯式名稱的存儲庫定義,RepoName將是“Maven”。 |
publishPubNamePublicationToMavenLocal | 將PubName發布復制到本地Maven緩存-通常是$USER_HOME/.m2/repository-以及發布的POM文件和其他元數據。 |
publish | 將所有定義的publication發布到所有定義的存儲庫的聚合任務。它不包括將publication復制到本地Maven庫。 |
publishToMavenLocal | 將所有定義的publication復制到本地 Maven 庫中,包括它們的元數據 (POM 文件等) |
4、執行任務
- 命令:gradle tasks
可以查看所有任務
- 命令:gradle publishToMavenLocal
執行publishToMavenLocal任務,或者在idea的gradle窗口點擊任務名也可以
查看本地maven倉庫,即可發找到發布的jar包
三、發布class.jar和sources.jar及javadoc.jar 三種jar包
新建打包sourcesJar任務 和 打包javadocJar任務,然后進行發布,
新增的 sourcesJar任務 和 javadocJar任務 可以在idea的gradle窗口中other任務列表中看到
完整代碼如下:
1 // 聲明插件 2 plugins { 3 id 'maven-publish' 4 } 5 6 7 // 項目group/artifact/version信息 8 group 'com.test.gradle' 9 // name 默認項目名 10 version '1.0-SNAPSHOT' 11 12 13 // 打包sourcesJar任務 14 task sourcesJar(type: Jar, dependsOn: classes) { 15 classifier = 'sources' 16 from sourceSets.main.allSource 17 } 18 19 // 打包javadocJar任務 20 task javadocJar(type: Jar, dependsOn: javadoc) { 21 classifier = 'javadoc' 22 from javadoc.destinationDir 23 } 24 25 // 解決javadoc打包亂碼 26 javadoc { 27 options { 28 encoding "UTF-8" 29 charSet 'UTF-8' 30 author true 31 version true 32 title "文檔大標題" 33 } 34 } 35 36 37 publishing { 38 // 發布 39 publications { 40 mavenJava(MavenPublication) { 41 //指定group/artifact/version信息 42 groupId project.group 43 artifactId project.name 44 version project.version 45 // components.java jar包 46 // components.web war包 47 from components.java 48 49 // 增加 sourcesJar、javadocJar 任務 50 artifact sourcesJar 51 artifact javadocJar 52 } 53 } 54 // 發布倉庫 55 repositories { 56 57 // 本地倉庫位於USER_HOME/.m2/repository 58 // 59 mavenLocal() 60 // 其他maven倉庫 61 maven { url uri('/Users/h__d/Desktop/1') } 62 // aliyun鏡像倉庫 63 // maven { 64 // // 憑證 65 // credentials { 66 // username 'username' // 倉庫發布用戶名 67 // password 'password' // 倉庫發布用戶密碼 68 // } 69 // // 地址 70 // url 'https://maven.aliyun.com/nexus/content/groups/public/' 71 // } 72 } 73 }
發布到配置倉庫命令:gradle publish
發布到本地倉庫命令:gradle publishToMavenLocal
進行發布
參考:
1、https://blog.csdn.net/u013632755/article/details/100111453
2、https://blog.csdn.net/dnc8371/article/details/106812825
3、https://blog.csdn.net/u011578734/article/details/114104495