日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Gradle的maven-publish插件发布快照

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Gradle的maven-publish插件发布快照 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我最近與Gradle一起開始了一個新項目 ,并決定直接參加–沒有Gradle經驗,沒有關于Groovy的線索,沒有教程,只是繼續嘗試直到可行。 在我決定使用孵化式maven-publish插件將快照發布到Sonatype的Maven快照存儲庫之前,這一切進展得令人驚奇,這確實令人信服。

警告:正如我說的那樣,我在Groovy和Gradle中都是菜鳥,所以不要相信我所說的話。 我為您寫下來的一切。

最后(但仍是部分的)的build.gradle文件可以找到這里 ,我在我的項目中使用的實際變異這里 。

第一步,確保存在項目的組,ID和版本。 通常可以在build.gradle文件中找到第一個和最后一個,項目名稱的ID會加倍,并在settings.gradle中定義。

激活

好了,走吧! 首先,我激活了插件:

apply plugin: 'maven-publish'

要開始發布內容,我需要以下內容:

publishing {publications {mavenJava(MavenPublication) {from components.java// more goes in here}}repositories {mavenLocal()} }

如您所見,我首先發布到本地倉庫。 事實上,運行gradle publish現在應該創建一個JAR,并在一些一個基本POM。 m2個子文件夾。 從這里開始,我可以逐步添加更多功能。

填充POM

發布工件需要什么? 完整的Maven pom。 由于我沒有pom.xml ,我在哪里可以得到它? 我用一些Gradle XML API創建它。 明顯。 為什么不使用Maven直接獲得pom? 如果我知道該死的...

因此,在mavenJava里面mavenJava東西(這是什么?我想是一個任務?),我創建了pom。 在解決以下語法之前,我花了一些時間嘗試這種方式:

pom.withXml {asNode().with {appendNode('packaging', 'jar')appendNode('name', 'PROJECT_NAME')appendNode('description', 'PROJECT_DESCRIPTION')appendNode('url', 'PROJECT_URL')appendNode('scm').with {appendNode('url', 'SCM_URL_FOR_PEOPLE')appendNode('connection', 'SCM_URL_FOR_SCM')}appendNode('issueManagement').with {appendNode('url', 'ISSUE_TRACKER_URL')appendNode('system', 'ISSUE_TRACKER_NAME')}appendNode('licenses').with {appendNode('license').with {appendNode('name', 'LICENSE_NAME')appendNode('url', 'LICENSE_URL')}}appendNode('organization').with {appendNode('name', 'ORG_NAME')appendNode('url', 'ORG_URL')}appendNode('developers').with {appendNode('developer').with {appendNode('id', 'DEV_HANDLE')appendNode('name', 'DEV_NAME')appendNode('email', 'DEV_MAIL')appendNode('organization', 'ORG_NAME_AGAIN')appendNode('organizationUrl', 'ORG_URL_AGAIN')appendNode('timezone', 'UTC_OFFSET')}}} }

好,我們去。 比丑陋的XML好得多,對吧? 我在某處讀到有更多美麗的API可以在這里使用,但我不想離開另一個切線。 隨意提出一些建議。

您可能已經注意到,無需重復項目組,ID和版本。 現在,運行gradle publish應該發布帶??有完整的pom的JAR,盡管它有點丑陋。

許可及更多

我想將項目的許可證添加到JAR的META-INF文件夾中,因此在mavenJava我告訴Gradle在每個JAR任務中都包含該文件(或者至少是我閱讀的方式):

tasks.withType(Jar) {from(project.projectDir) {include 'LICENSE.md'into 'META-INF'} }

看起來不錯, gradle publish現在會創建一個完整的pom和一個帶有項目許可證的JAR。

來源和Javadoc JAR

不過,大多數項目都希望發布的不僅僅是已編譯的.class文件,即源代碼和Javadoc。 為此,我添加了兩個任務,并從mavenJava引用了它們:

publishing {publications {mavenJava(MavenPublication) {// ...artifact sourceJarartifact javadocJar}}// ... }task sourceJar(type: Jar, dependsOn: classes) {classifier 'sources'from sourceSets.main.allSource }task javadocJar(type: Jar, dependsOn: javadoc) {classifier = 'javadoc'from javadoc.destinationDir }

很好,現在我得到了一個完整的pom,一個用于項目的類和許可證的工件,以及用于源代碼和Javadoc的JAR。 是時候采取最后一步了:發布到快照倉庫!

為此,我將使用實際的存儲庫替換mavenLocal 。 除了URL,我還需要指定我的憑據:

repositories {maven {url 'https://oss.sonatype.org/content/repositories/snapshots/'credentials {username 'user'password '123456'}} }

當然,我并不打算將密碼提交給源代碼管理,所以我一直在尋找替代方法。 我找到了一個-不確定它是否是最好的,但是,嘿,它有用。

您可以使用-P選項在命令行上定義新的項目屬性。 所以給這樣的命令...

gradle publish -P snapshotRepoPass=123456

…然后我可以訪問項目。 憑據中的snapshotRepoPass :

credentials {username 'user'password project.snapshotRepoPass }

甜。

直到我意識到現在所有其他任務都失敗了,因為始終創建credentials對象,因此需要存在屬性snapshotRepoPass 。 對于其他任務,除了發布之外,情況并非如此,因為我認為沒有理由將回購密碼傳遞給例如測試運行。 如此,我決定在構建文件中定義該屬性( 如果由于命令行選項而尚未定義):

ext {// the password needs to be specified via command linesnapshotRepoPass = project.hasProperty('snapshotRepoPass')? project.getProperty('snapshotRepoPass'): ''// it looks like the ternary operator can not actually be// split across lines; I do it here for artistic purposes }

我本可以將相同的hasProperty/ getProperty檢查放入憑據中,但決定在實現此行為的地方創建一個單獨的位置。

完成所有這些操作后,我確實可以將項目的當前狀態發布到Sonatype Maven快照存儲庫。 哇!

反射

總而言之,這實際上并不是那么糟糕。 該文檔有點稀疏,并在API中構建了XML文件,這使它變得更加冗長,讓人感到荒謬,但除此之外,它讀起來也很簡單。 當時不是,但是現在可以了,所以我應該停止抱怨了。

這是我所做的:

  • 使用apply plugin :' maven-publish '激活插件,并向build.gradle添加一個publishing節點。
  • 用漂亮的asNode.appendNode調用填充pom
  • 通過將復制步驟附加到每個與JAR相關的任務中來包括許可證
  • 創建源和Javadoc JAR的任務,并從publications節點引用它們。
  • 指定存儲庫URL并添加您的憑據。

如前所述,您可以簽出生成的build.gradle文件的兩個版本: 一個示例性的版本, 其中包括我們在此構建的內容和實際的交易 。

我還成功設置了Travis CI,以發布每個成功的版本,并將很快嘗試發布實際版本。 我會寫關于這兩者的...

翻譯自: https://www.javacodegeeks.com/2016/12/publishing-snapshots-gradles-maven-publish-plugin.html

總結

以上是生活随笔為你收集整理的使用Gradle的maven-publish插件发布快照的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。