Skip to content

Instantly share code, notes, and snippets.

@DanielThomas
Created August 20, 2024 05:24
Show Gist options
  • Save DanielThomas/83eefaad41af33a071d9a9ee17ca8fe1 to your computer and use it in GitHub Desktop.
Save DanielThomas/83eefaad41af33a071d9a9ee17ca8fe1 to your computer and use it in GitHub Desktop.
Shared class paths mismatch due to Class-Path manifest entries
#!/bin/bash -xe
dir=$(mktemp -d)
cd "$dir"
touch manifest-empty.txt
cat << EOF > manifest-guice-all.txt
Class-Path: guice-grapher-5.1.0.jar guice-assistedinject-5.1.0.jar guice-dagger-adapter-5.1.0.jar guice-jmx-5.1.0.jar guice-jndi-5.1.0.jar guice-persist-5.1.0.jar guice-struts2-5.1.0.jar guice-servlet-5.1.0.jar guice-spring-5.1.0.jar guice-throwingproviders-5.1.0.jar guice-5.1.0.jar asm-9.6.jar guava-30.1-jre.jar failureaccess-1.0.1.jar listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
EOF
mkdir lib
jar cvfm lib/guice-all-5.1.1-jakartaee.jar manifest-guice-all.txt
jar cvfm lib/failureaccess-1.0.1.jar manifest-empty.txt
jar cvfm lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar manifest-empty.txt
cat << EOF > Main.java
public class Main {
public static void main(String[] args) {
}
}
EOF
javac Main.java
jar cvfm lib/main.jar manifest-empty.txt Main.class
CP="lib/guice-all-5.1.1-jakartaee.jar:lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:lib/failureaccess-1.0.1.jar:lib/main.jar"
java -XX:ArchiveClassesAtExit=application.jsa -Xlog:class+path=info -cp "$CP" Main
java -XX:SharedArchiveFile=application.jsa -Xlog:class+path=info -cp "$CP" Main
@DanielThomas
Copy link
Author

The reason for this unusual Class-Path entry with missing libraries is the Gradle Shadow plugin:

GradleUp/shadow#324

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment