[
https://issues.apache.org/jira/browse/MSHADE-252?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17314377#comment-17314377
]
Alexander Kriegisch commented on MSHADE-252:
--------------------------------------------
[~snyangzhenyu99], there are several problems with your setup:
* There seems to be a typo in your {{shadedPattern}}. You should remove the
leading dot because the dot is just a package separator and does not make sense
in a leading position. It would not even be a legal package name and not
compile in Java.
* Please avoid shading a package into a subpackage of its own like
{{com.fake}} to {{com.fake.shaded}}. You could potentially be getting some kind
of recursive problem and depending on the algorithm used for replacing package
and path names you could be lucky and it works or not. In your case it works
for binaries because Maven Shade uses an ASM utility class for relocating
binaries, which seems to do a good job.
* You are not so lucky with the source code, simply because there is and
always has been a bug in sources shading: If a source file matches {{pattern}},
the replacement to {{shadedPattern}} will always be done *globally* throughout
the file using a naive {{sourceContent.replaceAll( "\\b" + pattern,
shadedPattern )}}, which would also not work correctly for a simple
(non-recurive) relocation such as {{com.fake}} to {{org.acme.shaded}}, because
not only is there the naive {{replaceAll}} call, but also any exclusions are
completely ignored by the plugin during replacement.
Now after the bad news, here are the good ones:
* I have fixed that bug, scratching my own itch, because I had the same
problem for the non-recursive case in Maven Shade 3.2.4. I am going to create a
pull request. I have never contributed to this project before, so let us hope
the PR is going to be accepted and a bugfix release published soon.
* Somewhat to my own surprise, my bugfix even works in your case, i.e. when
shading a package into its own subpackage with excludes. (You have got to
remove the leading dot though, like I said.)
> shadeSourcesContent is broken when combined with partial relocation
> -------------------------------------------------------------------
>
> Key: MSHADE-252
> URL: https://issues.apache.org/jira/browse/MSHADE-252
> Project: Maven Shade Plugin
> Issue Type: Bug
> Affects Versions: 2.4.3, 3.0.0
> Reporter: Zhenyu Yang
> Priority: Major
> Labels: easyfix
>
> per description in
> https://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html#shadeSourcesContent,
> when set it to true,
> "it will attempt to shade the contents of the java source files when creating
> the sources jar." However, it seems will blindly shade all the source files
> include those are excluded from relocation rules.
> This could be illustrated with a simple example:
> Assume there are two classes defined in two packages as below:
> {code:title=A.java}
> package com.fake.fooA;
> import com.fake.fooB;
> public Class A {}
> {code}
> {code:title=B.java}
> package com.fake.fooB;
> import com.fake.fooA;
> public class B {}
> {code}
> and the maven config looks like:
> {code:xml}
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-shade-plugin</artifactId>
> <version>2.4.3</version>
> <executions>
> <!-- Run shade goal on package phase -->
> <execution>
> <phase>package</phase>
> <goals>
> <goal>shade</goal>
> </goals>
> <configuration>
> <shadedArtifactAttached>false</shadedArtifactAttached>
> <createSourcesJar>true</createSourcesJar>
> <shadeSourcesContent>true</shadeSourcesContent>
> <relocations>
> <relocation>
> <pattern>com.fake</pattern>
> <shadedPattern>.com.fake.shaded</shadedPattern>
> <excludes>
> <exclude>com.fake.fooA.*</exclude>
> </excludes>
> </relocation>
> </relocations>
> {code}
> Then the shade plugin will modify the B's source file to be:
> {code}
> package com.fake.shaded.fooB;
> import com.fake.shaded.fooA;
> public class B {}
> {code}
> Notice that package A's path was also updated, which is wrong as it's not got
> relocated.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)