255 lines
9.5 KiB
Groovy

plugins {
id("com.palantir.git-version") apply false
id 'java-library'
id 'com.gradleup.shadow'
id 'signing'
id 'io.codearte.nexus-staging'
id 'maven-publish'
}
apply from: "../../../gradle/coverage/java-coverage.gradle"
apply from: "../versioning.gradle"
import org.apache.tools.ant.filters.ReplaceTokens
jar {
if (project.hasProperty('archiveAppendix')) {
archiveAppendix.set(project.archiveAppendix)
}
archiveClassifier = "lib"
}
dependencies {
api project(':entity-registry')
api project(':metadata-integration:java:datahub-event')
implementation project(':metadata-integration:java:datahub-schematron:lib')
implementation(externalDependency.kafkaAvroSerializer) {
exclude group: "org.apache.avro"
}
implementation externalDependency.avro
implementation externalDependency.httpClient
constraints {
implementation('commons-collections:commons-collections:3.2.2') {
because 'Vulnerability Issue'
}
}
implementation externalDependency.awsS3
implementation externalDependency.jacksonDataBind
runtimeOnly externalDependency.jna
api externalDependency.slf4jApi
compileOnly externalDependency.lombok
annotationProcessor externalDependency.lombok
// VisibleForTesting
compileOnly externalDependency.guava
testImplementation externalDependency.testng
testImplementation externalDependency.mockito
testImplementation externalDependency.mockServer
testImplementation externalDependency.mockServerClient
testImplementation externalDependency.testContainers
testRuntimeOnly externalDependency.logbackClassic
}
task copyAvroSchemas {
dependsOn(':metadata-events:mxe-schemas:renameNamespace')
copy {
from file('../../../metadata-events/mxe-schemas/src/renamed/avro/com/linkedin/mxe/MetadataChangeProposal.avsc')
into file('./src/main/resources')
}
}
compileJava.dependsOn copyAvroSchemas
// Add Python environment validation task
task validatePythonEnv(dependsOn: [":metadata-ingestion:installDev"]) {
doFirst {
def venvPath = System.getProperty('python.venv.path', '../../../metadata-ingestion/venv')
def isWindows = System.getProperty('os.name').toLowerCase().contains('windows')
def pythonExe = isWindows ? "${venvPath}/Scripts/python.exe" : "${venvPath}/bin/python"
def result = exec {
commandLine pythonExe, "-c", "import sys; print(sys.executable)"
ignoreExitValue = true
standardOutput = new ByteArrayOutputStream()
errorOutput = new ByteArrayOutputStream()
}
if (result.exitValue != 0) {
throw new GradleException("Python virtual environment not properly set up at ${venvPath}")
}
}
}
test {
// to avoid simultaneous executions of tests when complete build is run
mustRunAfter(":metadata-io:test")
useJUnit()
// Add Python environment configuration
dependsOn validatePythonEnv
dependsOn tasks.getByPath(":metadata-ingestion:installDev")
systemProperty 'python.venv.path', System.getProperty('python.venv.path', '../../../metadata-ingestion/venv')
finalizedBy jacocoTestReport
}
task checkShadowJar(type: Exec) {
commandLine 'sh', '-c', 'scripts/check_jar.sh'
}
shadowJar {
zip64 = true
if (project.hasProperty('archiveAppendix')) {
archiveAppendix.set(project.archiveAppendix)
}
archiveClassifier = ''
// preventing java multi-release JAR leakage
// https://github.com/johnrengelman/shadow/issues/729
exclude('module-info.class', 'META-INF/versions/**',
'**/LICENSE', '**/LICENSE*.txt', '**/NOTICE', '**/NOTICE.txt', 'licenses/**', 'log4j2.*', 'log4j.*')
dependencies {
exclude(dependency("org.slf4j::"))
exclude(dependency("antlr::"))
exclude("org/apache/commons/logging/**")
}
mergeServiceFiles()
// we relocate namespaces manually, because we want to know exactly which libs we are exposing and why
// we can move to automatic relocation using ConfigureShadowRelocation after we get to a good place on these first
relocate 'org.springframework', 'datahub.shaded.org.springframework'
relocate 'com.fasterxml.jackson', 'datahub.shaded.jackson'
relocate 'org.yaml', 'datahub.shaded.org.yaml' // Required for shading snakeyaml
relocate 'net.jcip.annotations', 'datahub.shaded.annotations'
relocate 'javassist', 'datahub.shaded.javassist'
relocate 'edu.umd.cs.findbugs', 'datahub.shaded.findbugs'
relocate 'org.antlr', 'datahub.shaded.org.antlr'
//relocate 'antlr', 'datahub.shaded.antlr'
relocate 'com.google.common', 'datahub.shaded.com.google.common'
relocate 'org.apache.commons.codec', 'datahub.shaded.org.apache.commons.codec'
relocate 'org.apache.commons.compress', 'datahub.shaded.org.apache.commons.compress'
relocate 'org.apache.commons.lang3', 'datahub.shaded.org.apache.commons.lang3'
relocate 'org.apache.commons.lang', 'datahub.shaded.org.apache.commons.lang'
relocate 'org.apache.commons.cli', 'datahub.shaded.org.apache.commons.cli'
relocate 'org.apache.commons.text', 'datahub.shaded.org.apache.commons.text'
relocate 'org.apache.commons.io', 'datahub.shaded.org.apache.commons.io'
relocate 'org.apache.maven', 'datahub.shaded.org.apache.maven'
relocate 'org.reflections', 'datahub.shaded.org.reflections'
relocate 'st4hidden', 'datahub.shaded.st4hidden'
relocate 'org.stringtemplate', 'datahub.shaded.org.stringtemplate'
relocate 'org.abego.treelayout', 'datahub.shaded.treelayout'
relocate 'javax.annotation', 'datahub.shaded.javax.annotation'
relocate 'com.github.benmanes.caffeine', 'datahub.shaded.com.github.benmanes.caffeine'
relocate 'org.checkerframework', 'datahub.shaded.org.checkerframework'
relocate 'com.google.errorprone', 'datahub.shaded.com.google.errorprone'
// Below jars added for kafka emitter only
relocate 'com.thoughtworks.paranamer', 'datahub.shaded.com.thoughtworks.paranamer'
relocate 'org.xerial.snappy', 'datahub.shaded.org.xerial.snappy'
relocate 'org.apache.kafka', 'datahub.shaded.org.apache.kafka'
relocate 'org.apache.http', 'datahub.shaded.org.apache.http'
relocate 'software.amazon.awssdk', 'datahub.shaded.software.amazon.awssdk'
relocate 'io.confluent', 'datahub.shaded.io.confluent'
relocate 'org.apache.zookeeper', 'datahub.shaded.org.apache.zookeeper'
relocate 'org.apache.yetus', 'datahub.shaded.org.apache.yetus'
relocate 'jline', 'datahub.shaded.jline'
relocate 'org.apache.jute', 'datahub.shaded.org.apache.jute'
relocate 'org.I0Itec.zkclient', 'datahub.shaded.org.I0Itec.zkclient'
relocate 'net.jpountz', 'datahub.shaded.net.jpountz'
relocate 'com.github.luben', 'datahub.shaded.com.github.luben'
relocate 'common.message', 'datahub.shaded.common.message'
relocate 'org.glassfish', 'datahub.shaded.org.glassfish'
relocate 'ch.randelshofer', 'datahub.shaded.ch.randelshofer'
relocate 'io.github.classgraph', 'datahub.shaded.io.github.classgraph'
relocate 'nonapi.io.github.classgraph', 'datahub.shaded.nonapi.io.github.classgraph'
relocate 'org.eclipse.parsson', 'datahub.shaded.parsson'
relocate 'jakarta.json', 'datahub.shaded.json'
relocate 'io.netty', 'datahub.shaded.io.netty'
relocate 'org.apache.hc', 'datahub.shaded.org.apache.hc'
relocate 'org.reactivestreams', 'datahub.shaded.org.reactivestreams'
relocate 'software.amazon.eventstream', 'datahub.shaded.software.amazon.eventstream'
finalizedBy checkShadowJar
}
checkShadowJar {
dependsOn shadowJar
}
assemble {
dependsOn shadowJar
}
compileTestJava.dependsOn shadowJar
task sourcesJar(type: Jar) {
archiveClassifier = 'sources'
from sourceSets.main.allSource
}
task javadocJar(type: Jar) {
archiveClassifier = 'javadoc'
from javadoc
}
publishing {
publications {
shadow(MavenPublication) { publication ->
project.shadow.component(publication)
pom {
name = 'Datahub Client'
group = 'io.acryl'
artifactId = 'datahub-client' + (project.hasProperty('archiveAppendix') ? "-${archiveAppendix}" : '')
description = 'DataHub Java client for metadata integration'
url = 'https://datahubproject.io'
artifacts = [shadowJar, javadocJar, sourcesJar]
scm {
connection = 'scm:git:git://github.com/datahub-project/datahub.git'
developerConnection = 'scm:git:ssh://github.com:datahub-project/datahub.git'
url = 'https://github.com/datahub-project/datahub.git'
}
licenses {
license {
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id = 'datahub'
name = 'Datahub'
email = 'datahub@acryl.io'
}
}
}
}
}
repositories {
maven {
def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
def ossrhUsername = System.getenv('RELEASE_USERNAME')
def ossrhPassword = System.getenv('RELEASE_PASSWORD')
credentials {
username ossrhUsername
password ossrhPassword
}
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
}
}
}
signing {
def signingKey = findProperty("signingKey")
def signingPassword = System.getenv("SIGNING_PASSWORD")
useInMemoryPgpKeys(signingKey, signingPassword)
sign publishing.publications.shadow
}
nexusStaging {
serverUrl = "https://s01.oss.sonatype.org/service/local/"
//required only for projects registered in Sonatype after 2021-02-24
username = System.getenv("NEXUS_USERNAME")
password = System.getenv("NEXUS_PASSWORD")
}