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 Attachments: SimpleRelocator.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