Think Twice
IT技術メモ | Gradleのメモ
Created: 2023-02-05 / Updated: 2023-02-05

Gradleでビルドスクリプトを切り出したときのclasspathについて


目次


概要

ビルドスクリプト中のclasspathはビルドスクリプト単位で有効になるようです。
例えば、build.gradleから、script1.gradleというビルドスクリプトを読み込んでいる場合に、
script1.gradleの中でGroovyYamlSlurperを使いたかったような場合は、
以下のように、script1.gradleの方で、dependenciesの定義が必要なようです。

切り出したビルドスクリプトで依存関係を定義する

build.gradle
Copy
apply from: 'script1.gradle'
script1.gradle
Copy
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.apache.groovy:groovy-all:4.0.8'
        classpath 'org.apache.groovy:groovy-yaml:4.0.8'
    }
}

import groovy.yaml.*
task foo {
    doFirst {
        println("hello")
        // ここでYamlSlurperが使える!
        def yaml = new YamlSlurper()
        def data = yaml.parseText('''
        key1: value1
        key2: value2
        ''')
        println yaml // groovy.yaml.YamlSlurper@xxxxxxxx
        println(data.key1) // Output: value1
    }
}

実行結果

script1.gradleで定義したfooタスクを実行
Copy
$ gradle foo

> Task :foo
hello
groovy.yaml.YamlSlurper@265c5e90
value1

BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed