1. 程式人生 > >Gradle 1.12使用者指南翻譯——第五十二章. Maven 外掛

Gradle 1.12使用者指南翻譯——第五十二章. Maven 外掛

本文由CSDN部落格貌似掉線翻譯,其他章節的翻譯請參見:
http://blog.csdn.net/column/details/gradle-translation.html
翻譯專案請關注Github上的地址:
https://github.com/msdx/gradledoc
本文翻譯所在分支:
https://github.com/msdx/gradledoc/tree/1.12。
直接瀏覽雙語版的文件請訪問:
http://gradledoc.qiniudn.com/1.12/userguide/userguide.html。
另外,Android 手機使用者可通過我寫的一個程式瀏覽文件,帶快取功能的,目前0.5版本相容 Android 2.3以上系統,專案地址如下:

https://github.com/msdx/gradle-doc-apk
翻譯不易,轉載請註明本文在CSDN部落格上的出處:
http://blog.csdn.net/maosidiaoxian/article/details/53749725

關於我對Gradle的翻譯,以Github上的專案及http://gradledoc.qiniudn.com 上的文件為準。如發現翻譯有誤的地方,將首先在以上兩個地方更新。因時間精力問題,部落格中發表的譯文基本不會同步修改。

另外,目前Gradle1.12版本的文件我電腦上已經翻譯到第六十三章,所以該版本的翻譯也進入校稿階段,校稿的方式可以為到該專案https://github.com/msdx/gradledoc 提交issue或者是pull request。

校稿的結果不只是在此版本更新,也會用於改善Gradle下一版本(2.0)文件的翻譯。

第五十二章. Maven 外掛

此章節還在完善中。

Maven 外掛添加了將專案部署到 Maven 倉庫的支援。

52.1. 用法

要使用 Maven 外掛,請在構建指令碼中包含以下語句:

示例 52.1. 使用 Maven 外掛

build.gradle

apply plugin: 'maven'

52.2. 任務

Maven 外掛定義了以下任務:

表 52.1. Maven 外掛 - 任務

任務名稱依賴於型別描述
install所有構建相關archives的任務。將相關的構件安裝到本地的 Maven 快取,包括 Maven 元資料的生成。預設情況下 install 任務是與archives
配置相關聯的。該項配置在預設情況下只包含預設的 jar 檔案。要了解更多關於安裝到本地資源庫的內容,請參閱:第 52.6.3 節,“安裝到本地倉庫”

52.3. 依賴管理

Maven 外掛不定義任何依賴配置。

52.4. 約定屬性

Maven 外掛定義了下列約定屬性:

表 52.2. Maven 外掛 - 屬性

屬性名稱型別預設值描述
pomDirNameStringpoms相對於構建目錄,用於寫入生成的POM的資料夾路徑。
pomDirFile (read-only)buildDir/pomDirName生成的POM所寫入的目錄。

52.5. 約定方法

Maven 外掛提供了用於建立 POM 的工廠方法,如果你需要一個 POM 檔案但是沒有上傳到 Maven 倉庫的場景,這個工廠方法將非常有用。

示例 52.2. 建立一個單獨的 pom。

build.gradle

task writeNewPom << {
    pom {
        project
            inceptionYear '2008'
            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    distribution 'repo'
                }
            }
        }
    }.writeTo("$buildDir/newpom.xml")
}

除其他事項外,Gradle支援和polyglot Maven同樣的生成器語法。如果要了解關於 Gradle Maven POM 物件的更多資訊,請參閱MavenPom。請參見: MavenPluginConvention

52.6. 與 Maven 倉庫的互動

52.6.1. 介紹

通過 Gradle你可以部署到遠端 Maven 倉庫,或者是安裝到你的本地 Maven 倉庫。這包括所有的 Maven 元資料操縱,並且 Maven snapshot一樣可用。事實上,Gradle 的部署是 100%相容 Maven的,因為我們在hood下使用的是本地的 Maven Ant 任務。

如果你沒有一個POM檔案,部署到 Maven 倉庫只有一半的樂趣。幸運的是 Gradle 可以使用它的依賴資訊為你生成這個 POM。

52.6.2. 部署到 Maven 倉庫

讓我們假設你的專案只是產生預設的 jar 檔案。現在你想要將這個 jar 檔案部署到遠端 Maven 倉庫。

示例 52.3. 上傳檔案到遠端 Maven 倉庫

build.gradle

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://localhost/tmp/myRepo/")
        }
    }
}

就這些了。呼叫uploadArchives任務將生成 POM,並將部署構件和 POM 到指定的倉庫。

如果你需要支援檔案之外的其他協議,那麼你還需要再做一些事情。在這種情況下,我們必須將委派本地的Maven程式碼給第三方庫實現。具體是哪些庫,將取決於你需要的協議。表 52.3. “Maven 部署的協議jar”列出了可用的協議以及相應的庫(這些庫又有具有傳遞依賴,而這些依賴也有其自己的傳遞依賴)。[19] 舉個例子,要使用ssh協議,你可以:

示例 52.4. 通過 SSH 上傳檔案

build.gradle

configurations {
    deployerJars
}

repositories {
    mavenCentral()
}

dependencies {
    deployerJars "org.apache.maven.wagon:wagon-ssh:2.2"
}

uploadArchives {
    repositories.mavenDeployer {
        configuration = configurations.deployerJars
        repository(url: "scp://repos.mycompany.com/releases") {
            authentication(userName: "me", password: "myPassword")
        }
    }
}

Maven deployer有很多配置選項。這個配置通過一個 Groovy builder 來完成。這個配置樹的所有元素都是 Java beans。你可以傳一個map到bean元素中,來配置簡單的屬性。如果要新增另一個bean元素到它的parent,你可以使用一個閉包。在上例中repositoryauthentication都是這樣的 bean 元素。表 52.4,"MavenDeployer 的配置元素"列出了可用的 bean 元素,以及 javadoc 中相應類的連結。在javadoc 中你可以看到可能的屬性,這些屬性你可以設定為特定的元素。

在 Maven 中你可以定義倉庫和snapshot倉庫。如果沒有定義任何snapshot 倉庫,release和snapshot都將部署到repository元素中。否則,snapshots將部署到snapshotRepository元素中。

表 52.3. Maven 部署的協議 jars

協議Library
httporg.apache.maven.wagon:wagon-http:2.2
sshorg.apache.maven.wagon:wagon-ssh:2.2
ssh-externalorg.apache.maven.wagon:wagon-ssh-external:2.2
ftporg.apache.maven.wagon:wagon-ftp:2.2
webdavorg.apache.maven.wagon:wagon-webdav:1.0-beta-2
file-

52.6.3. 安裝到本地倉庫

Maven 外掛將install任務新增到你的專案。這個任務依賴於archives配置的所有archives任務。它將這些archives安裝到你的本地 Maven 倉庫中。本地倉庫的預設位置是否在 Maven settings.xml中被重新定義,這項任務也會考慮到。

52.6.4. Maven POM 生成

當部署一個artifact 到一個 Maven 庫時,Gradle 會自動為它生成一個POM。下表展示了用於POM的groupIdartifactIdversionpackaging元素的預設值。這些dependency元素由project 的依賴宣告所建立。

表 52.5. Maven POM 生成的預設值

Maven 元素預設值
groupIdproject.group
artifactIduploadTask.repositories.mavenDeployer.pom.artifactId(如果有設定的話)或archiveTask.baseName.
versionproject.version
packagingarchiveTask.extension

在這裡, uploadTaskarchiveTask分別指向上傳和分別生成archive的任務(例如uploadArchivesjar)。archiveTask.baseName預設為project.archivesBaseName,後者預設為project.name

當你將archiveTask.baseName設定為非預設值時,請確保將uploadTask.repositories.mavenDeployer.pom.artifactId設定為相同的值。否則,在相同的構建中,這個專案可能會被其他專案所生成的POMs 中錯誤的 artifact ID所引用到。

生成的 POMs 可以在<buildDir>/poms看到。它們可以通過MavenPom API 進一步定製化。例如,你可能希望部署到 Maven 倉庫中的artifact 有不同的版本,或者是不同於 Gradle 生成的artifact 的名稱。如果要自定義這些你可以這樣做:

示例 52.5. pom定製

build.gradle

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://localhost/tmp/myRepo/")
            pom.version = '1.0Maven'
            pom.artifactId = 'myMavenName'
        }
    }
}

如果要向 POM 新增其他的內容,可以使用pom.project 生成器。通過這個生成器,Maven POM 參考中列出的任何元素都可以被新增進來。

示例 52.6. pom 的生成器型別自定義

build.gradle

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://localhost/tmp/myRepo/")
            pom.project {
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        distribution 'repo'
                    }
                }
            }
        }
    }
}

注:groupIdartifactIdversionpackaging應該始終直接在pom物件上設定。

示例 52.7. 修改自動生成的內容

build.gradle

[installer, deployer]*.pom*.whenConfigured {pom ->
    pom.dependencies.find {dep -> dep.groupId == 'group3' && dep.artifactId == 'runtime' }.optional = true
}

如果你有超過一個的artifact 要釋出,那麼要做的事情就會有些不同。請參閱第 52.6.4.1 節,“一個專案多個構件”

要為 Maven installer(見第 52.6.3 條,“安裝到本地資源庫”) 自定義設定,你可以:

示例 52.8. Maven installer 的自定義

build.gradle

install {
    repositories.mavenInstaller {
        pom.version = '1.0Maven'
        pom.artifactId = 'myName'
    }
}

相關推薦

Gradle 1.12使用者指南翻譯——. Maven 外掛

本文由CSDN部落格貌似掉線翻譯,其他章節的翻譯請參見:http://blog.csdn.net/column/details/gradle-translation.html翻譯專案請關注Github上的地址:https://github.com/msdx/gradledoc

Gradle 1.12使用者指南翻譯——. OSGi 外掛

本文由CSDN部落格萬一博主翻譯,其他章節的翻譯請參見: http://blog.csdn.net/column/details/gradle-translation.html 翻譯專案請關注Github上的地址: https://github.com/msdx

Gradle 1.12使用者指南翻譯——. FindBugs 外掛

其他章節的翻譯請參見: http://blog.csdn.net/column/details/gradle-translation.html 翻譯專案請關注Github上的地址: https://github.com/msdx/gradledoc/tree/1.

Gradle 1.12使用者指南翻譯——. Build Init 外掛

本文由CSDN部落格貌似掉線翻譯,其他章節的翻譯請參見:http://blog.csdn.net/column/details/gradle-translation.html翻譯專案請關注Github上的地址:https://github.com/msdx/gradledoc

Gradle 1.12使用者指南翻譯——. 應用程式外掛

本文由CSDN部落格貌似掉線翻譯,其他章節的翻譯請參見:http://blog.csdn.net/column/details/gradle-translation.html翻譯專案請關注Github上的地址:https://github.com/msdx/gradledoc

Gradle 1.12使用者指南翻譯——. CodeNarc 外掛

其他章節的翻譯請參見: http://blog.csdn.net/column/details/gradle-translation.html 翻譯專案請關注Github上的地址: https://github.com/msdx/gradledoc/tree/1.

Gradle 1.12使用者指南翻譯——第二. Checkstyle 外掛

其他章節的翻譯請參見: http://blog.csdn.net/column/details/gradle-translation.html 翻譯專案請關注Github上的地址: https://github.com/msdx/gradledoc/tree/1.

“全棧2019”Java:繼承與初始化詳解

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第五十二章:繼承與初始化詳解 下一章 “全棧2019”Java第五十三章:向上轉型和向下轉型

:FastDFS分散式檔案系統

資料下載 大綱     FastDFS架構包括Tracker server 和 Storage server 。客戶端請求Tracker server 進行檔案上傳、下載,通過Ttacker server 排程,最總

Docker 1.12 Swarm叢集實戰()

補充一些遺漏的問題. 本章主要內容: 使用 constraints 指定 service 約束.service 掛載使用本地volume.ELK日誌平臺使用GELF日誌驅動收集日誌. 1. 指定service約束 在前幾章中, 我們建立的 registry 服務,是由

python學習天logging模塊的使用

logging模塊 this 需求 gin info 等於 net 正常的 可能 很多程序都有記錄日誌的需求,並且日誌包含的信息即有正常的程序訪問日誌,還可能有錯誤,警告等信息輸出,python的 logging模塊提供了標準的日誌接口,你可以通過它存儲各種格式的日誌

python學習天logging模組的使用

   很多程式都有記錄日誌的需求,並且日誌包含的資訊即有正常的程式訪問日誌,還可能有錯誤,警告等資訊輸出,python的 logging模組提供了標準的日誌介面,你可以通過它儲存各種格式的日誌,logging的日誌可以分debug(),info() warning() error()

C++筆記 課 C++中的抽象類和介面---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第五十二課 C++中的抽象類和介面 1.什麼是抽象類? 面向物件中的抽象概念 在進行面向物件分析時,會發現一些抽象的概念!圖形的面積如何計算? 在現實中需要知道具體的圖形型

“全棧2019”Java:多型詳解

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第五十四章:多型詳解 下一章 “全棧2019”Java第五十五章:方法的靜態繫結與動態繫結

“全棧2019”Java:多型與構造方法詳解

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第五十七章:多型與構造方法詳解 下一章 “全棧2019”Java第五十八章:多型中方法返回型

“全棧2019”Java:多型中方法返回型別可以是子類型別

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第五十八章:多型中方法返回型別可以是子類型別 下一章 “全棧2019”Java第五十九章:抽

“全棧2019”Java:抽象類與抽象方法詳解

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第五十九章:抽象類與抽象方法詳解 下一章 “全棧2019”Java第六十章:如何定義介面

:Spring Cloud容器

Spring Cloud中文網 Spring Cloud 是什麼? Spring Cloud 是一系列框架的有序集合,將市面上開發得比較好的模組整合進去,進行封裝,從而減少了各模組的開發成本。 Spring Cloud 優缺點 基於註解,沒有配置檔案,解耦的 Spring Clo

:Dubbo分散式服務框架

Dubbo官網 什麼是Dubbo? 它有什麼特點?它的優點是什麼? 為什麼要使用它?有什麼功能?Dubbo能做什麼?   什麼是Dubbo? 1.Dubbo是一個分散式服務框架。 說明:如果沒有分散式的需求,其實是不需要用的,只有在分散式的時候,才有dubbo這

孤荷凌寒自學python天初次嘗試使用python讀取Firebase資料庫中記錄

孤荷凌寒自學python第五十二天初次嘗試使用python讀取Firebase資料庫中記錄   (完整學習過程螢幕記錄視訊地址在文末)   今天繼續研究Firebase資料庫,利用google免費提供的這個資料庫服務,今天主要嘗試使用firebase_admin模組來連線fireb