plugins {
    id 'java-library'
    id 'maven-publish'
    id "com.palantir.git-version"
}

group = rootProject.group
version = gitVersion()

publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId = project.group
            artifactId = project.name
            version = version
            from components.java
        }
    }
    repositories {
        maven {
            // change URLs to point to your repos, e.g. http://my.org/repo
            def releasesRepoUrl = "http://ykt-nx.supwisdom.com/repository/ecard-repo/"
            def snapshotsRepoUrl = "http://ykt-nx.supwisdom.com/repository/ecard-repo/snapshot/"
            url = version.endsWith('dirty') ? snapshotsRepoUrl : releasesRepoUrl
            credentials(PasswordCredentials) {
                username = nxUser
                password = nxPassword
            }
        }
    }
}

dependencies {
    implementation 'org.slf4j:slf4j-parent:1.7.26'
    implementation 'org.slf4j:slf4j-api:1.7.26'
    implementation 'javax.validation:validation-api:2.0.1.Final'
    implementation 'javax.servlet:javax.servlet-api:4.0.1'
    implementation 'commons-beanutils:commons-beanutils:1.9.3'
    implementation('org.springframework.boot:spring-boot-starter-validation:2.1.6.RELEASE')

    implementation 'org.hibernate:hibernate-validator:6.0.2.Final'
    compile 'javax.el:javax.el-api:3.0.0'
    compile 'org.glassfish.web:javax.el:2.2.6'

    compileOnly 'org.projectlombok:lombok:1.18.8'
    annotationProcessor 'org.projectlombok:lombok:1.18.8'

    implementation 'org.apache.commons:commons-lang3:3.9'

    testImplementation 'junit:junit:4.12'
}