BegemoT
BegemoT

Reputation: 3856

Re-using properties of custom gradle task

I'm defining gradle task like this:

task assembleAppPackage() {    
  File distDir = file("${projectDir}/dist")
  File binDir = file("${distDir}/bin")
  File configDir = file("${distDir}/config")
  File libDir = file("${distDir}/lib")

  doLast {
    ...using distDir , binDir, etc...
  }
}

Somewhere later I want to add some functionality to assembleAppPackage, so I expect something like this to work:

assembleAppPackage {
    doLast {
        copy {
            from "${projectDir}/bin"
            into binDir       #binDir from original task definition
        }
    }
}

And gradle claims there is no binDir in scope:

Could not get unknown property 'binDir' for object of type org.gradle.api.internal.file.copy.CopySpecWrapper_Decorated.

How to define task properties which could be later accessed on task extensions? Is it only possible with defining task class?

Upvotes: 0

Views: 65

Answers (1)

eekboom
eekboom

Reputation: 5802

You can use extra properties for this I think:

task assembleAppPackage() {    
  ext.distDir = file("${projectDir}/dist")
  ext.binDir = file("${distDir}/bin")
  ext.configDir = file("${distDir}/config")
  ext.libDir = file("${distDir}/lib")

  doLast {
    ...using distDir , binDir, etc...
  }
}

(rest of your code unchanged)

On most gradle entities you can use that concept: Set a property using "ext." or

ext {
    name1 = value1
    name2 = value2
}

See https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html or google for "gradle extra properties"

Upvotes: 1

Related Questions