plugins { id 'java-library' id "com.github.spotbugs" version "5.0.12" id 'com.github.hierynomus.license' version '0.16.1' id 'com.github.johnrengelman.shadow' version '7.1.2' id 'checkstyle' id 'jacoco' id 'maven-publish' id 'io.github.gradle-nexus.publish-plugin' version '1.1.0' id 'signing' } group 'software.amazon.neptune' version project.hasProperty("BETA_VERSION") ? "${project.MAJOR_VERSION}.${project.MINOR_VERSION}.${project.PATCH_VERSION}-beta.${project.BETA_VERSION}" : "${project.MAJOR_VERSION}.${project.MINOR_VERSION}.${project.PATCH_VERSION}" description 'Amazon Neptune JDBC Driver' repositories { mavenCentral() } java { withJavadocJar() withSourcesJar() } // See https://github.com/gradle/gradle/issues/10384#issuecomment-1279708395 // See https://docs.gradle.org/current/userguide/cross_project_publications.html#sec:variant-aware-sharing // See https://docs.gradle.org/current/userguide/variant_model.html def shadowElements = configurations.create('shadowElements') { canBeConsumed = true canBeResolved = false attributes { attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.LIBRARY)) attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.JAVA_RUNTIME)) attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling, Bundling.SHADOWED)) } outgoing.artifact(tasks.named('shadowJar')) } components.java.addVariantsFromConfiguration(shadowElements) { } def projectUrl = "https://$githubOrgPrefix/${project.name}" publishing { publications { mavenJava(MavenPublication) { from components.java pom { name = "${project.group}:${project.name}" url = "$projectUrl" description = "${project.description}" scm { connection = "scm:git:git://$githubOrgPrefix/${project.name}.git" developerConnection = "scm:git:ssh://$githubOrgPrefix/${project.name}.git" url = "$projectUrl" } licenses { license { name = "$licenseName" url = "$projectUrl/blob/develop/LICENSE" } } developers { developer { name = "$developerOrg" organization = "$developerOrg" organizationUrl = "$developerOrgUrl" } } } } } } signing { required { gradle.taskGraph.hasTask('publishToOssrh') } sign publishing.publications } nexusPublishing { repositories { ossrh { nexusUrl = uri("https://aws.oss.sonatype.org/service/local/") snapshotRepositoryUrl = uri("https://aws.oss.sonatype.org/content/repositories/snapshots/") } } } // Silently agree to build scan terms. //if (hasProperty('buildScan')) { // buildScan { // termsOfServiceUrl = 'https://gradle.com/terms-of-service' // termsOfServiceAgree = 'yes' // } //} jar { manifest { manifest { attributes( 'Implementation-Version': archiveVersion, 'Implementation-Vendor': "$developerOrg" ) } } } java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } test { environment.remove("AWS_ACCESS_KEY_ID") environment.remove("AWS_SECRET_ACCESS_KEY") environment.remove("AWS_SESSION_TOKEN") useJUnitPlatform() testLogging.showStandardStreams = true } checkstyle { ignoreFailures = true } spotbugs { showStackTraces = false reportsDir = file("$buildDir/reports/spotbugs") ignoreFailures = true includeFilter = file("config/spotbugs/spotbugs-exclude.xml") } spotbugsMain { reports { html { required = true outputLocation = file("$buildDir/reports/spotbugs/main.html") } } } spotbugsTest { reports { html { required = true outputLocation = file("$buildDir/reports/spotbugs/test.html") } } } jacocoTestReport { reports { html.required = true xml.required = true } } test.finalizedBy(project.tasks.jacocoTestReport) jacocoTestCoverageVerification { violationRules { rule { element = 'CLASS' excludes = [ ] limit { counter = 'LINE' minimum = 0.00 } limit { counter = 'BRANCH' minimum = 0.00 } } } } check.dependsOn jacocoTestCoverageVerification jacocoTestCoverageVerification.dependsOn jacocoTestReport task persistVersionInfo(type: WriteProperties) { outputFile("$buildDir/resources/main/project.properties") property("driver.major.version", MAJOR_VERSION) property("driver.minor.version", MINOR_VERSION) property("driver.full.version", project.version) } processResources.dependsOn persistVersionInfo /** * License Plugin */ license { header = project.file('license-header.txt') ext.year = Calendar.getInstance().get(Calendar.YEAR) exclude "**/*.properties" exclude "**/*.jar" headerDefinitions { slash_star_with_space { firstLine = '/*' endLine = ' *\n */\n' beforeEachLine = ' * ' firstLineDetectionPattern = '/\\*' lastLineDetectionPattern = ' \\*\n \\*/\n' } } mapping { java = 'slash_star_with_space' } } dependencies { // Dependencies implementation group: 'commons-beanutils', name: 'commons-beanutils', version: "$beanutilsVersion" implementation group: 'org.apache.tinkerpop', name: 'gremlin-driver', version: "$gremlinVersion" implementation group: 'org.apache.tinkerpop', name: 'gremlin-groovy', version: "$gremlinVersion" implementation group: 'com.amazonaws', name: 'amazon-neptune-sigv4-signer', version: "$amazonSigv4SignerVersion" implementation group: 'com.amazonaws', name: 'amazon-neptune-sparql-java-sigv4', version: "$amazonSigv4SignerVersion" implementation group: 'com.amazonaws', name: 'amazon-neptune-gremlin-java-sigv4', version: "$amazonSigv4SignerVersion" implementation group: 'com.jcraft', name: 'jsch', version: "$jschVersion" implementation group: 'io.netty', name: 'netty-all', version: "$nettyVersion" implementation group: 'org.neo4j.driver', name: 'neo4j-java-driver', version: "$neo4jDriverVersion" implementation group: 'org.apache.jena', name: 'jena-arq', version: "$jenaVersion" implementation group: 'org.slf4j', name: 'slf4j-log4j12', version: "$slf4jVersion" implementation group: 'com.google.code.gson', name: 'gson', version: "$gsonVersion" implementation group: 'com.google.guava', name: 'guava', version: "$guavaVersion" implementation group: 'org.apache.calcite', name: 'calcite-core', version: "$calciteVersion" implementation group: 'org.apache.calcite', name: 'calcite-linq4j', version: "$calciteVersion" compileOnly group: 'org.projectlombok', name: 'lombok', version: "$lombokVersion" compileOnly group: 'com.puppycrawl.tools', name: 'checkstyle', version: "$puppyCrawlVersion" compileOnly group: 'org.immutables', name: 'value', version: "$immutablesVersion" annotationProcessor group: 'org.projectlombok', name: 'lombok', version: "$lombokVersion" // Testing testImplementation group: 'info.picocli', name: 'picocli', version: "$picocliVersion" testImplementation group: 'com.googlecode.json-simple', name: 'json-simple', version: "$jsonSimpleVersion" testImplementation group: 'junit', name: 'junit', version: "$junitVersion" testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: "$jupiterVersion" testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "$jupiterVersion" testImplementation group: 'org.mockito', name: 'mockito-core', version: "$mockitoVersion" testImplementation group: 'org.mockito', name: 'mockito-inline', version: "$mockitoVersion" testImplementation group: 'com.massisframework', name: 'j-text-utils', version: "$jtextVersion" testImplementation group: 'org.neo4j.test', name: 'neo4j-harness', version: "$neo4jDBVersion" testImplementation group: 'org.neo4j.community', name: 'it-test-support', version: "$neo4jDBVersion" testImplementation group: 'org.neo4j', name: 'neo4j-kernel', version: "$neo4jDBVersion", classifier: "tests" testImplementation group: 'org.neo4j', name: 'neo4j-io', version: "$neo4jDBVersion", classifier: "tests" testImplementation group: 'com.google.code.findbugs', name: 'annotations', version: "$findBugsVersion" testImplementation (group: 'com.github.javafaker', name: 'javafaker', version: "$javafakerVersion") { exclude group: 'org.yaml', module: 'snakeyaml' } testImplementation group: 'org.apache.jena', name: 'jena-fuseki-main', version: "$jenaVersion" testCompileOnly group: 'org.projectlombok', name: 'lombok', version: "$lombokVersion" testAnnotationProcessor group: 'org.projectlombok', name: 'lombok', version: "$lombokVersion" testCompileOnly group: 'com.google.code.findbugs', name: 'annotations', version: "$findBugsVersion" testCompileOnly group: 'com.puppycrawl.tools', name: 'checkstyle', version: "$puppyCrawlVersion" testImplementation group: 'org.apache.tinkerpop', name: 'tinkergraph-gremlin', version: "$gremlinVersion" } shadowJar { archiveClassifier.set('all') // Exclude driver unnecessary classes. exclude 'org/apache/calcite/avatica/remote/Driver*' exclude 'org/apache/commons/dbcp2/PoolingDriver*' exclude 'META-INF/NOTICE*' exclude 'META-INF/LICENSE*' exclude 'META-INF/licenses/*' // Remove any unused dependencies minimize { exclude(dependency('org.apache.calcite::')) exclude(dependency('org.apache.tinkerpop::')) exclude(dependency('org.apache.log4j.*::')) exclude(dependency('com.jcraft::')) } // NOTE: DO NOT relocate 'javax' 'org.apache.log4j', 'org.codehaus' // Relocate (shadow) the following packages. relocate 'org.yaml', 'shadow.org.yaml' relocate 'org.twilmes', 'shadow.org.twilmes' relocate 'org.reactivestreams', 'shadow.org.reactivestreams' relocate 'org.pentaho', 'shadow.org.pentaho' relocate 'org.objectweb', 'shadow.org.objectweb' relocate 'org.neo4j', 'shadow.org.neo4j' relocate 'org.joda', 'shadow.org.joda' relocate 'org.javatuples', 'shadow.org.javatuples' relocate 'org.eclipse', 'shadow.org.eclipse' relocate 'org.checkerframework', 'shadow.org.checkerframework' relocate 'org.apiguardian', 'shadow.org.apiguardian' relocate 'org.apache.tinkerpop', 'shadow.org.apache.tinkerpop' relocate 'org.apache.thrift', 'shadow.org.apache.thrift' relocate 'org.apache.jena', 'shadow.org.apache.jena' relocate 'org.apache.ivy', 'shadow.org.apache.ivy' relocate 'org.apache.http', 'shadow.org.apache.tinkerhttp' relocate 'org.apache.groovy', 'shadow.org.apache.groovy' relocate 'org.apache.commons', 'shadow.org.apache.commons' relocate 'org.apache.calcite', 'shadow.org.apache.calcite' relocate 'net', 'shadow.net' relocate 'io', 'shadow.io' relocate 'groovyjarjarpicocli', 'shadow.groovyjarjarpicocli' relocate 'groovyjarjarasm', 'shadow.groovyjarjarasm' relocate 'groovyjarjarantlr', 'shadow.groovyjarjarantlr' relocate 'groovy', 'shadow.groovy' relocate 'com.amazon', 'shadow.com.amazon' relocate 'com.amazonaws', 'shadow.com.amazonaws' relocate 'com.carrotsearch', 'shadow.com.carrotsearch' relocate 'com.google', 'shadow.com.google' relocate 'com.ersi', 'shadow.com.ersi' relocate 'com.github', 'shadow.com.github' relocate 'com.jayway', 'shadow.com.jayway' relocate 'com.jcabi', 'shadow.com.jcabi' relocate 'com.jcraft', 'shadow.com.jcraft' relocate 'com.squareup', 'shadow.com.squareup' relocate 'com.yahoo', 'shadow.com.yahoo' }