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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Gradle引导旧式Ant构建

發(fā)布時間:2023/12/3 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Gradle引导旧式Ant构建 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Gradle提供了幾種不同的方式來利用您現(xiàn)有的對Ant的投資,包括積累的知識和您已經(jīng)放入構(gòu)建文件中的時間。 這可以極大地方便將Ant生成的項目移植到Gradle的過程,并為您提供逐步進(jìn)行此操作的路徑。 Gradle文檔在描述如何在Gradle構(gòu)建腳本中使用Ant方面做得很好,但是這里有一個快速概述以及我遇到的一些細(xì)節(jié)。

Gradle AntBuilder

每個Gradle項目都包含一個AntBuilder實例,從而使您的構(gòu)建文件中可以使用任何和所有Ant功能。 Gradle提供了對現(xiàn)有Groovy AntBuilder的簡單擴(kuò)展,它增加了一種與現(xiàn)有Ant構(gòu)建文件交互的簡單而強(qiáng)大的方法: importBuild(Object antBuildFile)方法。 在內(nèi)部,此方法利用Ant ProjectHelper解析指定的Ant構(gòu)建文件,然后將所有目標(biāo)包裝在Gradle任務(wù)中,以使它們在Gradle構(gòu)建中可用。 以下是用于說明的簡單Ant構(gòu)建文件,其中包含一些屬性和幾個相關(guān)的目標(biāo)。

<?xml version='1.0'?> <project name='build' default='all'><echo>Building ${ant.file}</echo><property file='build.properties'/><property name='root.dir' location='.'/><target name='dist' description='Build the distribution'><property name='dist.dir' location='dist'/><echo>dist.dir=${dist.dir}, foo=${foo}</echo></target><target name='all' description='Build everything' depends='dist'/> </project>

使用Gradle導(dǎo)入此構(gòu)建文件是一種方法。

ant.importBuild('src/main/resources/build.xml')

gradle任務(wù)的輸出–全部在命令行上顯示,目標(biāo)已添加到構(gòu)建任務(wù)中。

$ gradle tasks --all ... Other tasks ----------- all - Build everythingdist - Build the distribution ...

Ant構(gòu)建文件中使用的屬性可以在Gradle構(gòu)建或命令行中指定,并且與通常的Ant屬性行為不同,Ant或命令行上設(shè)置的屬性可能被Gradle覆蓋。 給定一個簡單的build.properties文件,其中的foo = bar為單個條目,這里有一些組合來演示覆蓋行為。

命令行調(diào)用 Gradle構(gòu)建配置 影響 結(jié)果
gradle dist ant.importBuild('src / main / resources / build.xml') 使用從ant build加載的build.properties值 foo = bar
gradle dist -Dfoo = NotBar ant.importBuild('src / main / resources / build.xml') 使用命令行屬性 foo = NotBar
gradle dist -Dfoo = NotBar ant.foo ='NotBarFromGradle'
ant.importBuild('src / main / resources / build.xml')
使用Gradle build屬性 foo = NotBarFromGradle
gradle dist -Dfoo = NotBar ant.foo ='NotBarFromGradle'
ant.importBuild('src / main / resources / build.xml')
ant.foo ='NotBarFromGradleAgain'
使用Gradle構(gòu)建屬性覆蓋 foo = NotBarFromGradleAgain

如何處理任務(wù)名稱沖突

由于Gradle堅持任務(wù)名稱的唯一性,因此嘗試導(dǎo)入包含與現(xiàn)有Gradle任務(wù)名稱相同的目標(biāo)的Ant構(gòu)建會失敗。 我遇到的最常見的沖突是Gradle BasePlugin提供的clean任務(wù)。 借助一些間接的幫助,我們?nèi)匀豢梢酝ㄟ^使用GradleBuild任務(wù)來導(dǎo)入和使用任何沖突目標(biāo),以在獨立的Gradle項目中引導(dǎo)Ant構(gòu)建導(dǎo)入。 讓我們在導(dǎo)入的Ant構(gòu)建中向混合添加一個新任務(wù),并對all任務(wù)依賴于螞蟻清理目標(biāo)添加另一個依賴。

<!-- excerpt from buildWithClean.xml Ant build file --><target name='clean' description='clean up'><echo>Called clean task in ant build with foo = ${foo}</echo></target><target name='all' description='Build everything' depends='dist,clean'/>

還有一個簡單的Gradle構(gòu)建文件,它將處理導(dǎo)入。

ant.importBuild('src/main/resources/buildWithClean.xml')

最后,在主gradle構(gòu)建文件中,我們添加了一個任務(wù)來運行所需的目標(biāo)。

task importTaskWithExistingName(type: GradleBuild) { GradleBuild antBuild ->antBuild.buildFile ='buildWithClean.gradle'antBuild.tasks = ['all'] }

這行得通,但不幸的是遇到了一個小問題 。 當(dāng)Gradle導(dǎo)入這些任務(wù)時,它沒有正確遵守依賴項的聲明順序。 而是按字母順序執(zhí)行從屬螞蟻目標(biāo)。 在這種特殊情況下,Ant希望在clean之前執(zhí)行dist目標(biāo),而Gradle則以相反的順序執(zhí)行它們。 可以通過明確說明任務(wù)順序來解決此問題,該任務(wù)順序絕對不理想,但可行。 這個Gradle任務(wù)將按照我們需要的方式執(zhí)行底層的Ant目標(biāo)。

task importTasksRunInOrder(type: GradleBuild) { GradleBuild antBuild ->antBuild.buildFile ='buildWithClean.gradle'antBuild.tasks = ['dist', 'clean'] }


其余的Gradle規(guī)則

最后,您可以使用Gradle Rule來允許在GradleBuild自舉導(dǎo)入中調(diào)用任意目標(biāo)。

tasks.addRule('Pattern: a-<target> will execute a single <target> in the ant build') { String taskName ->if (taskName.startsWith('a-')) {task(taskName, type: GradleBuild) {buildFile = 'buildWithClean.gradle'tasks = [taskName - 'a-']}} }

在此特定示例中,這還可以使您將調(diào)用串聯(lián)在一起,但要警告它們在完全隔離的環(huán)境中執(zhí)行。

$ gradle a-dist a-clean


源代碼

如果您想仔細(xì)看一看,本文中引用的所有代碼都可以在github上找到。

相關(guān)文章:

  • 為什么我喜歡Gradle?
  • 一個Groovy / Gradle JSLint插件
  • 使用Groovy腳本可以做的五件事
  • 參考:在The Kaptain on…內(nèi)容博客中, 使用Gradle從我們的JCG合作伙伴 Kelly Robinson 引導(dǎo)您的Legacy Ant構(gòu)建 。


    翻譯自: https://www.javacodegeeks.com/2012/08/using-gradle-to-bootstrap-your-legacy.html

    總結(jié)

    以上是生活随笔為你收集整理的使用Gradle引导旧式Ant构建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。