plugins {
    id 'com.github.johnrengelman.shadow' version '8.1.1'
    id 'application'
}

application {
    mainClass = 'org.apache.couchdb.nouveau.NouveauApplication'
}

repositories {
    mavenLocal()
    maven {
        url = uri('https://repo.maven.apache.org/maven2/')
    }
}

dependencies {
    implementation platform('io.dropwizard:dropwizard-dependencies:4.0.0')
    implementation 'io.dropwizard:dropwizard-core'
    implementation 'io.dropwizard:dropwizard-http2'
    implementation 'io.dropwizard.metrics:metrics-core'
    implementation 'io.dropwizard.metrics:metrics-caffeine'
    implementation 'io.dropwizard.metrics:metrics-jersey2'
    testImplementation 'io.dropwizard:dropwizard-testing'

    def luceneVersion = '9.6.0'
    implementation group: 'org.apache.lucene', name: 'lucene-core', version: luceneVersion
    implementation group: 'org.apache.lucene', name: 'lucene-queryparser', version: luceneVersion
    implementation group: 'org.apache.lucene', name: 'lucene-analysis-common', version: luceneVersion
    implementation group: 'org.apache.lucene', name: 'lucene-analysis-stempel', version: luceneVersion
    implementation group: 'org.apache.lucene', name: 'lucene-analysis-smartcn', version: luceneVersion
    implementation group: 'org.apache.lucene', name: 'lucene-analysis-kuromoji', version: luceneVersion
    implementation group: 'org.apache.lucene', name: 'lucene-facet', version: luceneVersion
    implementation group: 'org.apache.lucene', name: 'lucene-misc', version: luceneVersion

    def swaggerVersion = '2.2.8'
    implementation group: 'io.swagger.core.v3', name: 'swagger-jaxrs2-jakarta', version: swaggerVersion
    implementation group: 'io.swagger.core.v3', name: 'swagger-jaxrs2-servlet-initializer-v2', version: swaggerVersion

    testImplementation platform('org.junit:junit-bom:5.8.2')
    testImplementation 'org.junit.jupiter:junit-jupiter-api'
    testRuntimeOnly    'org.junit.jupiter:junit-jupiter-engine'
    testImplementation 'org.assertj:assertj-core'
    testImplementation 'org.mockito:mockito-core'
}

group = 'org.apache.couchdb.nouveau'
version = '1.0-SNAPSHOT'
description = 'server'
java.sourceCompatibility = JavaVersion.VERSION_11

jar {
    manifest.attributes('Multi-Release': 'true')
}

test {
    useJUnitPlatform()
}

shadowJar {
    archiveClassifier.set('dist')
    mergeServiceFiles()
}

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
    options.deprecation = true
}

tasks.withType(Javadoc) {
    options.encoding = 'UTF-8'
}

tasks.withType(AbstractArchiveTask) {
    preserveFileTimestamps = false
    reproducibleFileOrder = true
}
