apply plugin: 'java'
apply plugin: "maven"
apply plugin: 'signing'
apply plugin: 'idea'


group = "org.eclipse.persistence"
version = "1.0-SNAPSHOT"

jar {
    name = "jsonb-ri"
    archivesBaseName = "jsonb-ri"
    version =  '1.0-SNAPSHOT'
}

def defaultEncoding = 'UTF-8'
compileJava {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    options.encoding = defaultEncoding
    compileTestJava {
        options.encoding = defaultEncoding
    }

}

sourceSets {
    test {
        resources.srcDir 'src/main/resources'
    }
}

repositories {
    mavenLocal()
    mavenCentral()
    maven {
        url "https://maven.java.net/content/repositories/snapshots/"
    }
}

dependencies {
    compile 'javax.json.bind:javax.json.bind-api:1.0-SNAPSHOT'
    compile 'javax.json:javax.json-api:1.0'
    compile 'javax.enterprise:cdi-api:1.2'

    if (project.hasProperty('1.1')) {
        println '1.1'
        testRuntime 'org.glassfish:javax.json:1.1.0-SNAPSHOT'
    } else {
        println '1.0'
        testRuntime 'org.glassfish:javax.json:1.0.4'
    }

    testCompile 'org.openjdk.jmh:jmh-core:0.9.3'
    testCompile 'org.openjdk.jmh:jmh-generator-annprocess:0.9.3'
    testCompile 'junit:junit:4.12'
    testCompile 'org.openjdk.jmh:jmh-core:0.9.3';
    testCompile 'org.jboss.weld:weld-core:2.3.3.Final';
    testCompile 'org.jboss.weld.se:weld-se:2.3.3.Final';

}

test {
    if (!project.hasProperty('1.1')) {
        println 'Single value tests excluded'
        exclude 'org/eclipse/persistence/json/bind/defaultmapping/basic/SingleValueTest.class'
    }
}

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

idea {
    module {
        downloadJavadoc = true
        downloadSources = true
    }
}

/*task noErrorJavadoc(type: Javadoc) {
    failOnError = false
}*/

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc
}

task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

/*signing {
    sign configurations.archives
}*/

if (project.hasProperty("deployOSS")) {

    uploadArchives {
        repositories {
            mavenDeployer {
//            beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

                repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
                    authentication(userName: uName, password: uPwd)
                }

                snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
                    authentication(userName: uName, password: uPwd)
                }

                pom.project {
                    name 'jsonb-ri'
                    packaging 'jar'
                    // optionally artifactId can be defined here
                    description 'Reference implementation of JSR-367'
//                url 'http://www.example.com/example-application'

                    scm {
                        connection 'scm:git://git.eclipse.org/gitroot/eclipselink/eclipselink.runtime.git'
                        developerConnection 'scm:ssh://git.eclipse.org/gitroot/eclipselink/eclipselink.runtime.git'
                        url 'http://git.eclipse.org/c/eclipselink/eclipselink.runtime.git'
                    }

                    licenses {
                        license {
                            name 'Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0'
                            url 'http://www.eclipse.org/legal/epl-v10.html'
                        }
                    }

                    developers {
                        developer {
                            id 'rgrigoriadi'
                            name 'Roman Grigoriadi'
                            email 'roman.grigoriadi@oracle.com'
                        }
                    }
                }
            }
        }
    }
}
