【Gradle】maven-publish插件的使用


一、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM