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:1.2.0"
            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)

}
