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

        

Reply via email to