[ https://jira.codehaus.org/browse/MSHADE-104?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=283879#comment-283879 ]
Trask Stalnaker commented on MSHADE-104: ---------------------------------------- The <relocations> configuration property (http://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html#relocations) gets mapped to the PackageRelocation class, so even though the field is private, it gets set (magically) via the (proposed) <rawString> configuration property, e.g. <configuration> <relocations> <relocation> <rawString>true</rawString> <pattern>Lorg/aspectj/</pattern> <shadedPattern>Lorg/example/shaded/aspectj/</shadedPattern> </relocation> </relocations> </configuration> > Cannot shade aspectj library > ---------------------------- > > Key: MSHADE-104 > URL: https://jira.codehaus.org/browse/MSHADE-104 > Project: Maven 2.x Shade Plugin > Issue Type: Bug > Affects Versions: 1.4 > Reporter: Trask Stalnaker > Assignee: Benson Margulies > Attachments: MSHADE-104-v3.patch, shaded-aspectjweaver-pom.xml, > SimpleRelocator.patch, SimpleRelocatorTest-2.patch, SimpleRelocatorTest.patch > > > SimpleRelocator.java performs path matching in canRelocatePath() using > String.startsWith() which treats the relocation path as a non-regex but then > performs path substitution in relocatePath() using String.replaceFirst() > which treats the relocation path as a regex. > The reason I care about this difference is that I'm trying to shade the > AspectJ library, and one of its classes (org.aspectj.weaver.bcel.BcelShadow) > uses the string literal > "(I)Lorg/aspectj/lang/ProceedingJoinPoint;" which understandably doesn't get > shaded by a normal relocation pattern, e.g. > <relocation> > <pattern>org.aspectj</pattern> > <shadedPattern>hidden.aspectj</shadedPattern> > </relocation> > So I would like to hard-code an additional relocation pattern to handle this, > e.g. > <relocation> > <pattern>(I)Lorg/aspectj/lang/ProceedingJoinPoint;</pattern> > > <shadedPattern>(I)Lhidden/aspectj/lang/ProceedingJoinPoint;</shadedPattern> > </relocation> > This almost works, but not quite because the parentheses get treated as a > non-regex string in canRelocatePath() but then as a regex string in > relocatePath(). I can escape the parentheses to make relocatePath() match, > but then of course the escaping makes canRelocatePath() return false and then > it never gets to relocatePath(). > I hope you will consider the attached patch which uses > org.codehaus.plexus.util.StringUtils.replaceOnce() to perform a non-regex > substitution instead of String.replaceFirst(). I don't think this will cause > regression issues since the prior match in canRelocatePath() already performs > a non-regex match. I have attached a simple unit test as well (as a patch to > the existing SimpleRelocatorTest.java). > In case you're interested, here is a link to the "problem" AspectJ class: > http://dev.eclipse.org/viewcvs/viewvc.cgi/org.aspectj/modules/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java?view=markup&root=Tools_Project > (see text "(I)Lorg/aspectj/lang/ProceedingJoinPoint;" on line 2924) -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira