Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide shaded jar with dgraph4j's dependencies #239

Merged
merged 2 commits into from
Dec 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
* limitations under the License.
*/

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

buildscript {
repositories {
maven {
Expand All @@ -32,6 +34,7 @@ plugins {
id 'com.github.sherter.google-java-format' version '0.9'
id 'base'
id 'maven-publish'
id 'com.gradleup.shadow' version '8.3.2'
}
// Apply the java plugin to add support for Java
apply plugin: 'java'
Expand Down Expand Up @@ -171,6 +174,14 @@ task fatJar(type: Jar) {
with jar
}

tasks.named('shadowJar', ShadowJar) {
enableRelocation true
relocationPrefix "io.dgraph.dgraph4j.shaded"
relocate 'google', 'io.dgraph.dgraph4j.shaded.google'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mangalaman93 looks like only those classes that're in the google package are being relocated to a new namespace. So by shading only specific dependencies and not the classes in the main dgraph4j package, we should be able to maintain compatibility with existing projects as well as have a smaller jar file-size, as already noted on Discuss.
Also, should we finalize dgrap4j-shaded as the official name for the shaded version for release ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ShadowJar relocates all dependencies, but for some reason it does not automatically relocate the google package. Only with this line it also includes that package.

Classes in the io.dgraph.dgraph4j are not relocated, only dependencies.

I'd recommend to use the classifier (e.g. shaded):

implementation "io.dgraph:dgraph4j-all:24.0.0:shaded"

rather than giving it a new archive name / artifact name:

implementation "io.dgraph:dgraph4j-shaded:24.0.0"

as this better describes of what jar this is the shaded variant.

archiveClassifier.set("shaded")
mergeServiceFiles()
}

task buildJar(type: Jar)

task javadocJar(type: Jar) {
Expand Down Expand Up @@ -201,6 +212,7 @@ task integrationTest(type: Test) {

artifacts {
archives jar
archives shadowJar
archives sourceJar
archives javadocJar
}
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
rarvikar marked this conversation as resolved.
Show resolved Hide resolved
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading