maven-shade-plugin icon indicating copy to clipboard operation
maven-shade-plugin copied to clipboard

[MSHADE-406] relocated multi-release classes aren't moved to a new directory

Open jira-importer opened this issue 4 years ago • 1 comments

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

jira-importer avatar Oct 21 '21 22:10 jira-importer

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

jira-importer avatar Oct 19 '22 09:10 jira-importer