maven-shade-plugin
maven-shade-plugin copied to clipboard
[MSHADE-406] relocated multi-release classes aren't moved to a new directory
Brian Gruber opened MSHADE-406 and commented
In a project in which a dependency has a multi-release jar, classes that match a relocation pattern and are in the META-INF/versions directories are not moved to the new directory structure. They are, however, rewritten so that the class file itself specifies the new package name.
Sample project: https://gist.github.com/bgruber/5fb045759505da5150d3e93ec5c6010e
The generated jar file still contains classes like this:
$ jar tf target/relocation-test-SNAPSHOT-1.0.jar | grep versions | head
META-INF/versions/
META-INF/versions/9/
META-INF/versions/9/org/
META-INF/versions/9/org/bouncycastle/
META-INF/versions/9/org/bouncycastle/crypto/
META-INF/versions/9/org/bouncycastle/crypto/AsymmetricCipherKeyPair.class
META-INF/versions/9/org/bouncycastle/crypto/Digest.class
META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$Property.class
META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar.class
META-INF/versions/9/org/bouncycastle/crypto/KeyGenerationParameters.class
I expect these class files to be under META-INF/versions/9/com/dd/org/bouncycastle. Extracting one of them from the jar and examining it, the class file does appear to have been modified to have the new package name:
$ jar xf target/relocation-test-SNAPSHOT-1.0.jar META-INF/versions/9/org/bouncycastle/crypto/Digest.class
$ javap META-INF/versions/9/org/bouncycastle/crypto/Digest.class
Compiled from "Digest.java"
public interface com.dd.org.bouncycastle.crypto.Digest {
public abstract java.lang.String getAlgorithmName();
public abstract int getDigestSize();
public abstract void update(byte);
public abstract void update(byte[], int, int);
public abstract int doFinal(byte[], int);
public abstract void reset();
}
Issue Links:
- PHOENIX-7011 Remove relocated multi-release classes from shaded artifacts ("causes")
Remote Links:
4 votes, 5 watchers
sify21 commented
I posted a work-around here: https://stackoverflow.com/questions/74119618/maven-shade-plugin-relocate-classes-under-meta-inf-versions-in-multi-release-jar/74123163#74123163