Chapter 36. Maven Publishing (new)(譯文)

原文地址:https://docs.gradle.org/4.1/userguide/publishing_maven.html#sec:the_mavenpublish_plugin
為學(xué)習(xí)gradle上傳中使用maven上傳aar jar artifact至maven倉(cāng)庫(kù)(私服or mavenCentral)
ps:從一個(gè)程序員的角度翻譯,應(yīng)該更能讓大家易于接受

目錄

  • [36.1. The “maven-publish” Plugin] maven-publish插件介紹
  • [36.2. Publications]發(fā)版物
  • [36.3. Repositories]倉(cāng)庫(kù)
  • [36.4. Performing a publish]執(zhí)行發(fā)布
  • [36.5. Publishing to Maven Local]發(fā)布到本地Maven倉(cāng)庫(kù)
  • [36.6. Generating the POM file without publishing]生成POM文件不依賴(lài)發(fā)版

本章介紹由“maven-publish”插件提供的新的Maven發(fā)布支持。 最終,這種新的出版支持將通過(guò)上傳任務(wù)取代發(fā)布任務(wù)(及 maven_push 將取代 uploadArchives 任務(wù))。

注意:此插件生成的生成的POM文件目前不受支持。 Gradle的未來(lái)版本可能會(huì)添加此功能。 請(qǐng)使用 Maven plugin 將您的工件發(fā)布到Maven Central。

如果您正在使用上傳任務(wù)查找原始Maven發(fā)布支持的文檔(上傳至mavenCentral),請(qǐng)參閱Chapter 32, Publishing artifacts.。

36.1. The “maven-publish” Plugin(maven_publish插件介紹)

以Maven格式發(fā)布的能力由“maven-publish”插件提供。

“publishing”插件在名為 “publishing” 的 PublishingExtension類(lèi)型的項(xiàng)目上創(chuàng)建了一個(gè)extension.此extension提供了一個(gè)命名發(fā)布的容器和一個(gè)命名倉(cāng)庫(kù)的容器。

“maven-publish”插件適用于 MavenPublication出版物和 MavenArtifactRepository存儲(chǔ)庫(kù)。

Example 36.1. Applying the 'maven-publish' plugin

build.gradle

apply plugin: 'maven-publish'
36.2. Publications(出版物介紹)

如果您不熟悉項(xiàng)目artifacts和配置,則應(yīng)閱讀 Chapter 32, Publishing artifacts這里介紹了基本的概念。 本章還介紹了使用不同于本章所述機(jī)制的“publishing artifacts”。 這里描述的發(fā)布功能最終將取代該功能。

對(duì)于“maven-publish”插件有任何影響,必須將MavenPublication 添加到該組發(fā)布中。 此出版物確定實(shí)際發(fā)布的artifacts以及相關(guān)POM文件中包含的詳細(xì)信息。 可以通過(guò)添加組件,自定義工件以及直接修改生成的POM文件來(lái)配置發(fā)布。

36.2.1. Publishing a Software Component(發(fā)布軟件組件)

將Gradle項(xiàng)目發(fā)布到Maven存儲(chǔ)庫(kù)的最簡(jiǎn)單的方法是指定要發(fā)布的SoftwareComponent。 目前可供出版的組件有:


在以下示例中,工件和運(yùn)行時(shí)依賴(lài)關(guān)系取自Java插件添加的“java”組件。
Example 36.2. Adding a MavenPublication for a Java component

build.gradle

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}
36.2.2. Publishing custom artifacts(上傳自定義artifacts)

也可以顯式地配置要包含在發(fā)布中的artifacts。 Artifacts通常作為原始文件提供,或作為AbstractArchiveTask (e.g. Jar, Zip)的實(shí)例提供。

對(duì)于每個(gè)自定義artifact,可以指定要用于發(fā)布的extension和classifier。 請(qǐng)注意,只有一個(gè)已發(fā)布的工件可以具有classifier,并且所有其他artifacts必須具有唯一的classifier/extension組合。

配置自定義artifacts如下:
Example 36.3. Adding additional artifact to a MavenPublication

build.gradle

task sourceJar(type: Jar) {
    from sourceSets.main.allJava
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java

            artifact sourceJar {
                classifier "sources"
            }
        }
    }
}

有關(guān)如何自定義artifacts的更多信息,請(qǐng)參閱API文檔中的MavenPublication 類(lèi)。

36.2.3. Identity values in the generated POM(POM文件生成及配置)

生成的POM文件的屬性將包含從以下項(xiàng)目屬性派生的標(biāo)識(shí)值:

覆蓋默認(rèn)標(biāo)識(shí)值很簡(jiǎn)單:在配置MavenPublication時(shí),只需指定groupId,artifactId或版本屬性即可。
Example 36.4. customizing the publication identity

build.gradle

publishing {
    publications {
        maven(MavenPublication) {
            groupId 'org.gradle.sample'
            artifactId 'project1-sample'
            version '1.1'

            from components.java
        }
    }
}

Maven將“groupId”和“artifactId”限制為有限的字符集([A-Za-z0-9 _ \ - 。] +)),并且Gradle強(qiáng)制執(zhí)行此限制。 對(duì)于'version'(以及artifact'extension'和'classifier'),Gradle將處理任何有效的Unicode字符。

明確禁止的唯一Unicode值是“\”,“/”和任何ISO控制字符。 提供的價(jià)值在出版初期得到驗(yàn)證。

注意:某些存儲(chǔ)庫(kù)將無(wú)法處理所有支持的字符。 例如,當(dāng)在Windows上發(fā)布到文件系統(tǒng)支持的存儲(chǔ)庫(kù)時(shí),':'字符不能用作標(biāo)識(shí)符。

36.2.4. Modifying the generated POM(修改生成的POM)

生成的POM文件可能需要在發(fā)布之前進(jìn)行調(diào)整。 “maven-publish”插件提供了一個(gè)鉤子來(lái)允許這樣的修改。
Example 36.5. Modifying the POM file

build.gradle

publications {
    mavenCustom(MavenPublication) {
        pom.withXml {
            asNode().appendNode('description',
                                'A demonstration of maven POM customization')
        }
    }
}

在這個(gè)例子中,我們?yōu)樯傻腜OM添加了一個(gè)'description'元素。 使用此鉤子,您可以修改POM的任何方面。 例如,您可以將依賴(lài)關(guān)系的版本范圍替換為用于生成構(gòu)建的實(shí)際版本。

有關(guān)更多信息,請(qǐng)參閱API文檔中的MavenPom.withXml(org.gradle.api.Action)

實(shí)際上可以修改所創(chuàng)建的POM的任何方面。 這意味著也可以修改POM,使其不再是有效的Maven POM,因此在使用此功能時(shí)必須小心。

發(fā)布模塊的標(biāo)識(shí)符(groupId,artifactId,version)是一個(gè)例外; 這些值不能在POM中使用withXML鉤子修改。

36.2.5. Publishing multiple modules(發(fā)布多個(gè)模塊)

有時(shí),您可以從Gradle構(gòu)建中發(fā)布多個(gè)模塊,而無(wú)需創(chuàng)建單獨(dú)的Gradle子項(xiàng)目。 一個(gè)例子是為您的庫(kù)發(fā)布單獨(dú)的API和實(shí)現(xiàn)jar。 使用Gradle這很簡(jiǎn)單:
Example 36.6. Publishing multiple modules from a single project

build.gradle

task apiJar(type: Jar) {
    baseName "publishing-api"
    from sourceSets.main.output
    exclude '**/impl/**'
}

publishing {
    publications {
        impl(MavenPublication) {
            groupId 'org.gradle.sample.impl'
            artifactId 'project2-impl'
            version '2.3'

            from components.java
        }
        api(MavenPublication) {
            groupId 'org.gradle.sample'
            artifactId 'project2-api'
            version '2'

            artifact apiJar
        }
    }
}

如果一個(gè)項(xiàng)目定義了多個(gè)出版物,那么Gradle將會(huì)將這些發(fā)布到定義的存儲(chǔ)庫(kù)中。 每個(gè)出版物必須具有如上所述的唯一身份。

36.3. Repositories(倉(cāng)庫(kù))

出版物被發(fā)布到倉(cāng)庫(kù)。 發(fā)布到的存儲(chǔ)庫(kù)由 PublishingExtension.getRepositories()容器定義。
Example 36.7. Declaring repositories to publish to

build.gradle

publishing {
    repositories {
        maven {
            // change to point to your repo, e.g. http://my.org/repo
            url "$buildDir/repo"
        }
    }
}

用于聲明存儲(chǔ)庫(kù)以進(jìn)行發(fā)布的DSL是用于聲明存儲(chǔ)庫(kù)以從 RepositoryHandler使用依賴(lài)關(guān)系的DSL。 但是,在Maven發(fā)布的上下文中,只能使用 MavenArtifactRepository存儲(chǔ)庫(kù)進(jìn)行發(fā)布。

36.4. Performing a publish(執(zhí)行發(fā)布)

“maven-publish”插件會(huì)自動(dòng)為publisher.publications和publishing.repositories容器中的每個(gè)MavenPublication和MavenArtifactRepository組合創(chuàng)建一個(gè)PublishToMavenRepository任務(wù)。

創(chuàng)建的任務(wù)名為“發(fā)布”publish?PUBNAME?PublicationTo?REPONAME?Repository“。

Example 36.8. Publishing a project to a Maven repository

build.gradle

apply plugin: 'java'
apply plugin: 'maven-publish'

group = 'org.gradle.sample'
version = '1.0'

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}
publishing {
    repositories {
        maven {
            // change to point to your repo, e.g. http://my.org/repo
            url "$buildDir/repo"
        }
    }
}

Output of gradle publish

> gradle publish
:generatePomFileForMavenJavaPublication
:compileJava
:processResources NO-SOURCE
:classes
:jar
:publishMavenJavaPublicationToMavenRepository
:publish

BUILD SUCCESSFUL in 0s
4 actionable tasks: 4 executed

在此示例中,創(chuàng)建名為“publishMavenJavaPublicationToMavenRepository”的任務(wù),其類(lèi)型為PublishToMavenRepository。 此任務(wù)已連接到發(fā)布生命周期任務(wù)。 執(zhí)行“gradle publish”構(gòu)建POM文件和要發(fā)布的所有工件,并將它們傳輸?shù)酱鎯?chǔ)庫(kù)。

36.5. Publishing to Maven Local發(fā)布到本地maven倉(cāng)庫(kù))

為了與本地Maven安裝進(jìn)行集成,有時(shí)將模塊發(fā)布到本地.m2存儲(chǔ)庫(kù)中是有用的。 在Maven的說(shuō)法中,這被稱(chēng)為“安裝”模塊。 “maven-publish”插件通過(guò)在publishing.publications容器中為每個(gè) MavenPublication自動(dòng)創(chuàng)建一個(gè) PublishToMavenLocal任務(wù)來(lái)實(shí)現(xiàn)這一點(diǎn)。 每個(gè)這些任務(wù)都連接到publishToMavenLocal生命周期任務(wù)中。 你的publishing.repositories部分不需要mavenLocal

創(chuàng)建的任務(wù)名為“publish?PUBNAME?PublicationToMavenLocal“。

Example 36.9. Publish a project to the Maven local repository

Output of gradle publishToMavenLocal

> gradle publishToMavenLocal
:generatePomFileForMavenJavaPublication
:compileJava
:processResources NO-SOURCE
:classes
:jar
:publishMavenJavaPublicationToMavenLocal
:publishToMavenLocal

BUILD SUCCESSFUL in 0s
4 actionable tasks: 4 executed

此示例中生成的任務(wù)名為“publishMavenJavaPublicationToMavenLocal”。 此任務(wù)已連接到publishToMavenLocal生命周期任務(wù)中。 執(zhí)行“gradle publishToMavenLocal”構(gòu)建POM文件和要發(fā)布的所有工件,并將它們“安裝”到本地Maven存儲(chǔ)庫(kù)中。

36.6. Generating the POM file without publishing

有時(shí)在實(shí)際發(fā)布時(shí)為模塊生成Maven POM文件是有用的。 由于POM生成由單獨(dú)的任務(wù)執(zhí)行,因此很容易實(shí)現(xiàn)。

生成POM文件的任務(wù)是GenerateMavenPom類(lèi)型,并且根據(jù)發(fā)布的名稱(chēng)給出一個(gè)名稱(chēng):“generatePomFileFor?PUBNAME?Publication“。 所以在下面的例子中,出版物名為“mavenCustom”,任務(wù)將被命名為“generatePomFileForMavenCustomPublication”。

Example 36.10. Generate a POM file without publishing

build.gradle

model {
    tasks.generatePomFileForMavenCustomPublication {
        destination = file("$buildDir/generated-pom.xml")
    }
}

Output of gradle generatePomFileForMavenCustomPublication

> gradle generatePomFileForMavenCustomPublication
:generatePomFileForMavenCustomPublication

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

發(fā)布模型的所有細(xì)節(jié)仍然在POM生成中考慮,包括組件,自定義工件以及通過(guò)pom.withXml進(jìn)行的任何修改。

“maven-publish”插件利用了后期插件配置的一些實(shí)驗(yàn)支持,任何GenerateMavenPom任務(wù)將不會(huì)被構(gòu)建,直到配置發(fā)布擴(kuò)展。 當(dāng)您嘗試訪問(wèn)GenerateMavenPom任務(wù)時(shí),確保發(fā)布插件配置的最簡(jiǎn)單的方法是將訪問(wèn)放置在模型塊中,如上所述。
同樣適用于任何嘗試訪問(wèn)特定于發(fā)布的任務(wù),如PublishToMavenRepository.。 這些任務(wù)應(yīng)該在模型塊內(nèi)引用。

內(nèi)容如有錯(cuò)誤僅供參考,后續(xù)給出使用實(shí)例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評(píng)論 3 417
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,423評(píng)論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,991評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,761評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,207評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,419評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,653評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,901評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,678評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,978評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,785評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,898評(píng)論 6 342
  • 這篇文章講給大家?guī)?lái)gradle打包系列中的高級(jí)用法-自己動(dòng)手編寫(xiě)gradle插件。我們平常在做安卓開(kāi)發(fā)時(shí),都會(huì)在...
    呆萌狗和求疵喵閱讀 16,001評(píng)論 22 80
  • 姓名:張燕 公司:廣州沃沃農(nóng)牧科技有限公司 【日精進(jìn)打卡第000323天】 【知~學(xué)習(xí)~感悟】 六項(xiàng)精進(jìn) 1/51...
    拿走Star閱讀 313評(píng)論 0 0
  • 上一期在為腹透腎友們介紹了腹膜炎的相關(guān)知識(shí)中,我們列舉了很多在某醫(yī)院的腹膜炎發(fā)生原因調(diào)查例子,就是要更加深刻地表達(dá)...
    營(yíng)養(yǎng)師錦虹閱讀 508評(píng)論 0 1