plugins { id("com.palantir.git-version") apply false id "application" } apply plugin: 'java' apply plugin: 'com.gradleup.shadow' apply plugin: 'signing' apply plugin: 'io.codearte.nexus-staging' apply plugin: 'maven-publish' apply from: '../versioning.gradle' apply from: '../../../gradle/coverage/java-coverage.gradle' jar.enabled = false // Since we only want to build shadow jars, disabling the regular jar creation ext { javaMainClass = "datahub.protobuf.Proto2DataHub" } application { mainClassName = javaMainClass } dependencies { implementation project(':metadata-models') implementation project(path: ':metadata-integration:java:datahub-client', configuration: 'shadow') implementation externalDependency.guava implementation externalDependency.protobuf implementation externalDependency.jgrapht implementation externalDependency.gson implementation externalDependency.commonsCli implementation externalDependency.httpClient implementation externalDependency.slf4jApi implementation externalDependency.jacksonCore compileOnly externalDependency.lombok annotationProcessor externalDependency.lombok testImplementation externalDependency.testng } import java.nio.file.Paths task compileProtobuf { doLast { def basePath = Paths.get("${projectDir}/src/test/resources") [ fileTree("${projectDir}/src/test/resources/protobuf") { include "*.proto" }, fileTree("${projectDir}/src/test/resources/extended_protobuf") { include "*.proto" } ].collectMany { it.collect() }.each { f -> def input = basePath.relativize(Paths.get(f.getAbsolutePath())) println(input.toString() + " => " + input.toString().replace(".proto", ".protoc")) exec { workingDir "${projectDir}/src/test/resources" commandLine 'protoc', '--proto_path=.', '--include_imports', '--include_source_info', "--descriptor_set_out=${input.toString().replace(".proto", ".protoc")}", input } } } } task checkShadowJar(type: Exec) { commandLine 'sh', '-c', 'scripts/check_jar.sh' } //mark implementation dependencies which needs to excluded along with transitive dependencies from shadowjar //functionality is exactly same as "implementation" configurations { provided implementation.extendsFrom provided } shadowJar { zip64=true archiveClassifier = '' def exclude_modules = project .configurations .provided .resolvedConfiguration .getLenientConfiguration() .getAllModuleDependencies() .collect { it.name } dependencies { exclude(dependency { exclude_modules.contains(it.name) }) } 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 'com.fasterxml.jackson', 'datahub.shaded.jackson' 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 'org.apache.commons', 'datahub.shaded.org.apache.commons' relocate 'org.apache.http', 'datahub.shaded.org.apache.http' 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 'org.slf4j', 'datahub.shaded.slf4j' relocate 'com.github.benmanes.caffeine', 'datahub.shaded.com.github.benmanes.caffeine' relocate 'org.checkerframework', 'datahub.shaded.org.checkerframework' relocate 'org.jgrapht', 'datahub.shaded.org.jgrapht' relocate 'org.jheaps', 'datahub.shaded.org.jheaps' relocate 'ch.randelshofer', 'datahub.shaded.ch.randelshofer' relocate 'org.apache.hc', 'datahub.shaded.org.apache.hc' finalizedBy checkShadowJar } checkShadowJar { dependsOn shadowJar } assemble { 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 Protobuf' group = 'io.acryl' artifactId = 'datahub-protobuf' description = 'DataHub integration with Protobuf schemas for metadata' url = 'https://docs.datahub.com' 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") } startScripts.dependsOn shadowJar