Факторизовать Gradle Задача - PullRequest
0 голосов
/ 08 июня 2019

Я хотел бы разложить код в моем скрипте gradle (для проекта Android, не знаю, если он что-то изменит), который сейчас выглядит следующим образом:

task gifFoo (dependsOn: 'test') {
    doLast{
        exec{
            commandLine 'convert', '-delay', '200', 'screenshots/jpgFoo*',
                                   '-resize', '380x',
                                   'screenshots/gifFoo.gif'
        }
    }
}

task gifBar (dependsOn: 'test') {
    doLast{
        exec{
            commandLine 'convert', '-delay', '200', 'screenshots/jpgBar*',
                                   '-resize', '380x',
                                   'screenshots/gifBar.gif'
        }
    }
}

task gif(type: Copy, dependsOn : ['gifFoo', 'gifBar']) {
    from("screenshots")
    into("doc")
    include("*.gif")
}

Количество gif* задачбудет расти вместе с проектом, и я знаю, что это в основном копирование / вставка с изменением «Foo» на «Bar», что не очень хороший вариант.

Я довольно новичок в скрипте gradle и не понялпростой способ посмотреть / создать функцию / создать макрос задачи, как ты это делаешь?

1 Ответ

1 голос
/ 08 июня 2019
task gif(type: Copy) {
    from("screenshots")
    into("doc")
    include("*.gif")
}
['Foo', 'Bar'].each { thing ->
    task "gif$thing"(dependsOn: 'test') {
        doLast{
            exec{
                commandLine 'convert', '-delay', '200', "screenshots/${thing}*", 
                                   '-resize', '380x',
                                   "screenshots/gif${thing}gif" 
            }
        }
    }
    gif.dependsOn "gif$thing" 
} 

Или, возможно

task gifAll {
    doLast{
        ['Foo', 'Bar'].each {thing ->
           exec{
               commandLine 'convert', '-delay', '200', "screenshots/jpg${thing}*", 
                                   '-resize', '380x',
                                   "screenshots/gif${thing}.gif" 
           } 
        }
    }
} 

Если бы это был я, я бы поместил все гифки для конвертации в одну папку и конвертировал все, а не поддерживал список. Таким образом, когда вы добавляете больше картинок в папку, они автоматически конвертируются

Например:

task gifAll {
    inputs.dir 'src/main/screenshot' 
    outputs.dir "$buildDir/converted-screenshots" 
    doLast{
        fileTree('src/main/screenshot').each {thing ->
           exec{
               commandLine 'convert', '-delay', '200', thing.absolutePath, 
                                   '-resize', '380x',
                                   "$buildDir/converted-screenshots/$thing.name" 
           } 
        }
    }
} 
task gif(type: Copy, dependsOn: gifAll) {
    from("$buildDir/converted-screenshots")
    into("$buildDir/doc")
    include("*.gif")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...