2016-03-03 73 views
0

我定義了一個讀取屬性文件並更新某個字段的任務。我只想在執行'release'時運行,而不是在'build'期間運行。如何在構建期間排除Gradle任務或方法

我用這gradle這個釋放插件版本:https://github.com/researchgate/gradle-release

這個插件將更新gradle.properties文件到下一個版本的版本,每個版本。我需要保留當前的版本號,因此我寫了這個方法。

但是,無論何時執行構建,都會執行此任務。我試圖將其更改爲方法,並在'uploadArchives'內調用該方法,我認爲這隻在「發佈」期間運行。但沒有結果。它繼續在每個構建上執行!

如何從'build'中排除它並僅在發佈的情況下調用它?

這裏是任務和一些代碼片段:

task restoreCurrentVersion { 
    try { 
     String key = 'currentVersion' 
     File propertiesFile = project(':commons').file("gradle.properties") 
     String currentVersion = project(':commons').version 
     this.ant.replaceregexp(file: propertiesFile, byline: true) { 
      regexp(pattern: "^(\\s*)$key(\\s*)=(\\s*).+") 
      substitution(expression: "\\1$key\\2=\\3$currentVersion") 
     } 
    } catch (BuildException be) { 
     throw new GradleException('Unable to write version property.', be) 
    } 
} 

uploadArchives { 
    repositories.mavenDeployer { 
     repository(url: 'file://Users/my.home/.m2/repository/') 
    } 
// restoreCurrentVersion() //Uncommenting this makes the method (when converted the above task to a method) to execute always 
} 

createReleaseTag.dependsOn uploadArchives  
ext.'release.useAutomaticVersion' = "true" 

回答

1
  1. 您需要添加一個<<doLast塊到你的任務定義。否則它會在配置階段運行,這幾乎每次運行任何其他任務。在這裏看到:Why is my Gradle task always running?

  2. 還有就是要調用的gradle沒辦法/從另一個調用任務直接像你試圖在uploadArchives做一個任務,而不是使用dependsOnfinalizedBy設置任務相關。如果uploadArchives依賴於restoreCurrentVersion,則每次調用uploadArchives時都會首先調用restoreCurrentVersion。

相關問題