Gradle task should not execute automatically

后端 未结 3 521
滥情空心
滥情空心 2020-11-30 08:44

I\'m defining a task in gradle:

task releaseCandidate(type: Exec) {
    commandLine \'git\', \'checkout\', \'develop\'

    // Increment version code in Mani         


        
相关标签:
3条回答
  • 2020-11-30 09:12

    You are mixing Task configuration and groovy code. Everything that is part of the main body of a task definition will be executed in the configuration phase. The task task1 << { code } is a shorthand for

    
    task task1 {
      doLast {
        code
      }
    }
    

    commandLine is part of the Exec Task but your other code is not and should be wrapped into a doLast this will execute the commandline first and then execute your additional code. If you need another exec commandLine then you'll need another task.

    
    task releaseCandidate(type: Exec) {
        commandLine 'git', 'checkout', 'develop'
    
        doLast {
        // Increment version code in Manifest
        String manifest = new File('AndroidManifest.xml').getText('UTF-8')
        Pattern pattern = Pattern.compile('android:versionCode="([0-9]+)"')
        Matcher matcher = pattern.matcher(manifest)
        matcher.find()
        int newVersionCode = Integer.parseInt(matcher.group(1)) + 1
        manifest = manifest.replaceAll(
            "android:versionCode=\"([0-9]+)\"", "android:versionCode=\"$newVersionCode\""
        )
        new File('AndroidManifest.xml').write(manifest, 'UTF-8')
        }
    }
    
    0 讨论(0)
  • 2020-11-30 09:19

    A common pitfall. Add an action to the task otherwise code will run at configuration phase. Sample task with action:

    task sample << {
    }
    

    As I see You'd rather need to write a custom task than using Exec type. I suppose it's not valid to define commandLine twice.

    EDIT

    You can read this post to get the general idea how it all works.

    0 讨论(0)
  • 2020-11-30 09:24

    Just to complete @Opal answer for cases when Exec is really used (for example CommandLine reference) :

    task task1 << {
       exec {
            List<String> arguments = new ArrayList<String>()
            //..
            commandLine arguments
       }
    }
    
    0 讨论(0)
提交回复
热议问题