Brian Gruber created MSHADE-406:
-----------------------------------

             Summary: relocated multi-release classes aren't moved to a new 
directory
                 Key: MSHADE-406
                 URL: https://issues.apache.org/jira/browse/MSHADE-406
             Project: Maven Shade Plugin
          Issue Type: Bug
            Reporter: Brian Gruber


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:
{code:java}
$ 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{code}
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:
{code:java}
$ 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();
}{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to