Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gradle/Groovy syntax confusion

Tags:

gradle

groovy

Can anyone explain/comment on this fraction of Groovy code?

task copyImageFolders(type: Copy) {
    from('images') {
        include '*.jpg'
        into 'jpeg'
    }

    from('images') {
        include '*.gif'
        into 'gif'
    }

    into 'build'
}

More specifically about the from method. Is this the

from(sourcePaths)

or the

from(sourcePath, configureAction)

If its the one with the 2 arguments, why it’s written this way and not something like:

 from('images', {
     include '*.jpg'
     into 'jpeg'
 })
like image 803
Themelis Avatar asked Sep 17 '25 11:09

Themelis


2 Answers

The short answer is it's calling from(sourcePath, configureAction).

Groovy has optional brackets in a number of cases and accepts the last parameter (if it's a closure) outside of brackets and in this case that's the closure that you're passing to from().

This is a good blog post explaining the different ways a closure can be passed to a method in Groovy if you want more examples and this offers more examples of optional brackets in general.

like image 123
Aran K Avatar answered Sep 20 '25 10:09

Aran K


It's Syntactic Sugar, to make things easier to read (very useful for Gradle configuration)

In this case it's all about parentheses.

When a closure is the last parameter of a method call, like when using Groovy’s each{} iteration mechanism, you can put the closure outside the closing parentheses, and even omit the parentheses:

list.each( { println it } )
list.each(){ println it }
list.each  { println it }

In your case, everything below is working fine :

from('images', {
    include '*.jpg'
    into 'jpeg'
})

from('images') {
    include '*.gif'
    into 'gif'
}

from 'images', {
    include '*.gif'
    into 'gif'
}
like image 35
ToYonos Avatar answered Sep 20 '25 12:09

ToYonos