Hi,
Thanks for reporting.

Does your issue is similar to [1] - If yes please comment, vote
or if it is something else you can create a new issue.

[1] https://issues.apache.org/jira/browse/MASSEMBLY-607


wt., 16 lis 2021 o 14:51 Václav Haisman <vhais...@gmail.com> napisał(a):

> Hi.
>
> I think I found a defect in the latest currently available Maven Assembly
> plugin version 3.3.0. The Assembly plugin uses Common Artifact Filters's
> class `PatternIncludesArtifactFilter`. This class, in its method
> `matchAgainst()` loops over include patterns. If one of the include
> patterns contains 4+ components, 4th being the classifier (according to the
> source code, documentation does not mention classifier), it immediately
> rejects the artifact being checked for inclusion without testing the other
> patterns. My inclusion patterns are
>
>    - <include>com.XYZ:some-artifact:*:service:*</include>
>    - <include>org.python:jython-standalone</include>
>
> The jython pattern is not even tested against the jython dependency because
> it returns from the function early instead of continuing the loop.* This is
> code, the return statement should be continue statement instead for this to
> work as I think was intended*:
>
> private boolean matchAgainst( final String value, final List<String>
> patterns, final boolean regionMatch )
> {
>     final String[] tokens = value.split( ":" );
>     for ( String pattern : patterns )
>     {
>         String[] patternTokens = pattern.split( ":" );
>
>         if ( patternTokens.length == 5 && tokens.length < 5 )
>         {
>             // 4th element is the classifier
>             if ( !"*".equals( patternTokens[3] ) )
>             {
>                 // classifier required, cannot be a match
>                 return false;
>             }
>
> But this is not all. I tried running the 3.3.0 Assembly plugin with
> maven-common-artifact-filters artifact version 3.2.0 which seems to have
> been significantly rewritten. However, that rejects my 5 components pattern
> entirely. The comment in the code says "*we only accept 5 tokens if the
> classifier = '*'*", which seems to be a departure from what the previous
> version tried to support.
>
> // we only accept 5 tokens if the classifier = '*'
> if ( tokens.length == 5 )
> {
>     if ( tokens[3] != ANY )
>     {
>         throw new IllegalArgumentException( "Invalid pattern: " + pattern
> );
>     }
>     tokens = new char[][] { tokens[0], tokens[1], tokens[2], tokens[4] };
> }
>
>
> Was it intentional that the rewrite of the artifact filters stopped
> supporting previously supported patterns?
>
> Can we release Common Artifact Filters version 3.1.1 or such with the
> return statement changed to continue statement and at the same time release
> Assembly plugin 3.3.1 which would use this fixed Common Artifact Filters
> version to unbreak this?
>
>
> --
> VH
>


-- 
Sławomir Jaranowski

Reply via email to