description = "${artifactId} application"

apply plugin: "war"
apply plugin: "java"
apply plugin: "gretty"

sourceCompatibility = "1.8"
targetCompatibility = "1.8"

group = "${groupId}"
version = "${version}"

repositories {
    mavenLocal()

    mavenCentral()

    // All things JBoss/Hibernate
    maven {
        name "JBoss"
        url "http://repository.jboss.org/nexus/content/groups/public/"
    }
        

    // For access to Apache Staging (Preview) packages
    maven {
        name "Apache Staging"
        url "https://repository.apache.org/content/groups/staging"
    }
}

// This simulates Maven's "provided" scope, until it is officially supported by Gradle
// See http://jira.codehaus.org/browse/GRADLE-784

configurations {
    provided
}

sourceSets {
    main {
        compileClasspath += [configurations.provided]
        // To give the same path as IDEA has
        // output.resourcesDir = 'build/production/${artifactId}'
        // output.classesDir = 'build/production/${artifactId}'
    }
    test {
        compileClasspath += [configurations.provided]
        runtimeClasspath += [configurations.provided]
    }
}

dependencies {

    compile "org.apache.tapestry:tapestry-core:@tapestryReleaseVersion@"

    // Uncomment this to add support for file uploads:
    // compile "org.apache.tapestry:tapestry-upload:@tapestryReleaseVersion@"

    // CoffeeScript & Less support, plus resource minification:
    compile "org.apache.tapestry:tapestry-webresources:@tapestryReleaseVersion@"

    test "org.apache.tapestry:tapestry-test:@tapestryReleaseVersion@"

    // Log implementation choose one:
    // Log4j 1.x
    runtime "log4j:log4j:1.2.17"
    runtime "org.slf4j:slf4j-log4j12:@slf4jReleaseVersion@"
    // Logback
    // runtime "ch.qos.logback:logback-classic:1.0.13"

    provided "javax.servlet:javax.servlet-api:@servletApiReleaseVersion@"
}

test {
    useTestNG()

    options.suites("src/test/conf/testng.xml")

    systemProperties["tapestry.service-reloading-enabled"] = "false"
    systemProperties["tapestry.execution-mode"] = "development"

    maxHeapSize = "600M"

    jvmArgs("-XX:MaxPermSize=256M")

    enableAssertions = true
}

task wrapper(type: Wrapper) {
    gradleVersion = '4.3.1'
}

// TODO: Configure execution mode for jettyRun task
