buildscript {
    ext {
        sharedRepositories = {
            maven {
                url "https://plugins.gradle.org/m2/"
            }
            mavenLocal()
            mavenCentral()
            jcenter()
        }
        sharedDependencies = {
            classpath "org.codehaus.groovy:groovy-all:${libs.groovy}"
            classpath "org.jbake:jbake-gradle-plugin:+"
            classpath "io.freefair.gradle:jsass-gradle-plugin:0.6.0"
        }
        tomcatDependencies = {
            tomcat "org.apache.tomcat.embed:tomcat-embed-core:${libs.tomcat}"
            tomcat "org.apache.tomcat.embed:tomcat-embed-jasper:${libs.tomcat}"
            tomcat "org.apache.tomcat:tomcat-jasper:${libs.tomcat}"
            tomcat "org.apache.tomcat:tomcat-jasper-el:${libs.tomcat}"
            tomcat "org.apache.tomcat:tomcat-jsp-api:${libs.tomcat}"
            tomcat "org.apache.tomcat.embed:tomcat-embed-logging-juli:${libs.tomcatJuli}"
        }
        libs = [
            groovy: "2.4.11",
            jbake: "2.5.1",
            snakeYaml: "1.18",
            gradle: "3.5.1",
            tomcat: "8.5.16",
            tomcatJuli: "8.5.2"
        ]
        
        globalsFile = file("globals.yml")
        bakedDirRelativePath = "bake"
        bakedDir = file("${buildDir}/${bakedDirRelativePath}")
        cacheDir = file("${buildDir}/bake-cache")
        sourcesDir = file("src")
        contentDir = file("src/content")
        generatedDirRelativePath = "${buildDir.getName()}/generated-bake"
        generatedDir = file("${generatedDirRelativePath}")
        generatedContentDir = file("${generatedDir}/content")
        generatedAssetDir = file("${generatedDir}/assets")
        generatedTemplateDir = file("${generatedDir}/templates")
        templateDir = file("src/content/templates")
        
        initScript = { script ->
            script.configurations.create("tomcat")
            script.repositories sharedRepositories
            script.dependencies sharedDependencies
            script.dependencies tomcatDependencies
            script.configurations.classpath.extendsFrom(script.configurations.tomcat)
        }
        
    }
    initScript(buildscript)

}