Author: bentmann Date: Tue Dec 29 23:30:39 2009 New Revision: 894514 URL: http://svn.apache.org/viewvc?rev=894514&view=rev Log: [MSHADE-33] [shade] Support wildcarded excludes
Added: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/pom.xml (with props) maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/0.1/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/0.1/a-0.1.jar (with props) maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/0.1/a-0.1.pom maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/maven-metadata.xml (with props) maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/0.2/ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/0.2/b-0.2.jar (with props) maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/0.2/b-0.2.pom maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/maven-metadata.xml (with props) maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/verify.bsh (with props) maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java (with props) maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ArtifactSelectorTest.java (with props) Modified: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java maven/plugins/trunk/maven-shade-plugin/src/site/apt/examples/includes-excludes.apt.vm Added: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/pom.xml?rev=894514&view=auto ============================================================================== --- maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/pom.xml (added) +++ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/pom.xml Tue Dec 29 23:30:39 2009 @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<project> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.apache.maven.its.shade.aie</groupId> + <artifactId>test</artifactId> + <version>1.0</version> + <packaging>jar</packaging> + + <name>MSHADE-33</name> + <description> + Test artifact selection via glob includes/excludes. + </description> + + <repositories> + <repository> + <id>shade-it</id> + <url>file:///${basedir}/repo</url> + <releases> + <checksumPolicy>ignore</checksumPolicy> + </releases> + <snapshots> + <enabled>false</enabled> + </snapshots> + </repository> + </repositories> + + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.2</version> + </dependency> + <dependency> + <groupId>org.apache.maven.its.shade.aie</groupId> + <artifactId>a</artifactId> + <version>0.1</version> + </dependency> + <dependency> + <groupId>org.apache.maven.its.shade.aie</groupId> + <artifactId>b</artifactId> + <version>0.2</version> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <version>@project.version@</version> + <executions> + <execution> + <id>attach-shade</id> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + <configuration> + <shadedArtifactAttached>false</shadedArtifactAttached> + <artifactSet> + <includes> + <include>org.apache.maven.its.shade.aie</include> + </includes> + <excludes> + <exclude>*:b:jar:</exclude> + </excludes> + </artifactSet> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/0.1/a-0.1.jar URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/0.1/a-0.1.jar?rev=894514&view=auto ============================================================================== Binary file - no diff available. Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/0.1/a-0.1.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/0.1/a-0.1.pom URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/0.1/a-0.1.pom?rev=894514&view=auto ============================================================================== --- maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/0.1/a-0.1.pom (added) +++ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/0.1/a-0.1.pom Tue Dec 29 23:30:39 2009 @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<project> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.apache.maven.its.shade.aie</groupId> + <artifactId>a</artifactId> + <version>0.1</version> + <packaging>jar</packaging> + + <distributionManagement> + <repository> + <id>maven-core-it</id> + <url>file:///${basedir}/repo</url> + </repository> + </distributionManagement> +</project> Added: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/maven-metadata.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/maven-metadata.xml?rev=894514&view=auto ============================================================================== --- maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/maven-metadata.xml (added) +++ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/maven-metadata.xml Tue Dec 29 23:30:39 2009 @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<metadata> + <groupId>org.apache.maven.its.shade.aie</groupId> + <artifactId>a</artifactId> + <version>0.1</version> + <versioning> + <versions> + <version>0.1</version> + </versions> + <lastUpdated>20091229231152</lastUpdated> + </versioning> +</metadata> Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/maven-metadata.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/a/maven-metadata.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/0.2/b-0.2.jar URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/0.2/b-0.2.jar?rev=894514&view=auto ============================================================================== Binary file - no diff available. Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/0.2/b-0.2.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/0.2/b-0.2.pom URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/0.2/b-0.2.pom?rev=894514&view=auto ============================================================================== --- maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/0.2/b-0.2.pom (added) +++ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/0.2/b-0.2.pom Tue Dec 29 23:30:39 2009 @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<project> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.apache.maven.its.shade.aie</groupId> + <artifactId>b</artifactId> + <version>0.2</version> + <packaging>jar</packaging> + + <distributionManagement> + <repository> + <id>maven-core-it</id> + <url>file:///${basedir}/repo</url> + </repository> + </distributionManagement> +</project> Added: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/maven-metadata.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/maven-metadata.xml?rev=894514&view=auto ============================================================================== --- maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/maven-metadata.xml (added) +++ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/maven-metadata.xml Tue Dec 29 23:30:39 2009 @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<metadata> + <groupId>org.apache.maven.its.shade.aie</groupId> + <artifactId>b</artifactId> + <version>0.2</version> + <versioning> + <versions> + <version>0.2</version> + </versions> + <lastUpdated>20091229231210</lastUpdated> + </versioning> +</metadata> Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/maven-metadata.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/repo/org/apache/maven/its/shade/aie/b/maven-metadata.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/verify.bsh URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/verify.bsh?rev=894514&view=auto ============================================================================== --- maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/verify.bsh (added) +++ maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/verify.bsh Tue Dec 29 23:30:39 2009 @@ -0,0 +1,33 @@ +import java.io.*; +import java.util.jar.*; + +String[] wanted = +{ + "a.properties", +}; + +String[] unwanted = +{ + "b.properties", + "junit/framework/TestCase.class", +}; + +JarFile jarFile = new JarFile( new File( basedir, "target/test-1.0.jar" ) ); + +for ( String path : wanted ) +{ + if ( jarFile.getEntry( path ) == null ) + { + throw new IllegalStateException( "wanted path is missing: " + path ); + } +} + +for ( String path : unwanted ) +{ + if ( jarFile.getEntry( path ) != null ) + { + throw new IllegalStateException( "unwanted path is present: " + path ); + } +} + +jarFile.close(); Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/verify.bsh ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-shade-plugin/src/it/artifact-includes-excludes/verify.bsh ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java?rev=894514&view=auto ============================================================================== --- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java (added) +++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java Tue Dec 29 23:30:39 2009 @@ -0,0 +1,94 @@ +package org.apache.maven.plugins.shade.mojo; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; + +import org.apache.maven.artifact.Artifact; + +/** + * @author Benjamin Bentmann + */ +class ArtifactSelector +{ + + private Collection includes; + + private Collection excludes; + + public ArtifactSelector( ArtifactSet artifactSet, String groupPrefix ) + { + this( ( artifactSet != null ) ? artifactSet.getIncludes() : null, + ( artifactSet != null ) ? artifactSet.getExcludes() : null, groupPrefix ); + } + + public ArtifactSelector( Collection includes, Collection excludes, String groupPrefix ) + { + this.includes = toIds( includes ); + this.excludes = toIds( excludes ); + + if ( groupPrefix != null && groupPrefix.length() > 0 ) + { + this.includes.add( new ArtifactId( groupPrefix + "*", "*", "*", "*" ) ); + } + } + + private static Collection toIds( Collection patterns ) + { + Collection result = new HashSet(); + + if ( patterns != null ) + { + for ( Iterator it = patterns.iterator(); it.hasNext(); ) + { + String pattern = (String) it.next(); + result.add( new ArtifactId( pattern ) ); + } + } + + return result; + } + + public boolean isSelected( Artifact artifact ) + { + return ( artifact != null ) ? isSelected( new ArtifactId( artifact ) ) : false; + } + + boolean isSelected( ArtifactId id ) + { + return ( includes.isEmpty() || matches( includes, id ) ) && !matches( excludes, id ); + } + + private boolean matches( Collection patterns, ArtifactId id ) + { + for ( Iterator it = patterns.iterator(); it.hasNext(); ) + { + ArtifactId pattern = (ArtifactId) it.next(); + if ( id.matches( pattern ) ) + { + return true; + } + } + return false; + } + +} Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java?rev=894514&r1=894513&r2=894514&view=diff ============================================================================== --- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java (original) +++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java Tue Dec 29 23:30:39 2009 @@ -172,8 +172,13 @@ protected ArtifactResolver artifactResolver; /** - * Artifacts to include/exclude from the final artifact. - * + * Artifacts to include/exclude from the final artifact. Artifacts are denoted by composite identifiers of the + * general form <code>groupId:artifactId:type:classifier</code>. Since version 1.3, the wildcard characters '*' and '?' can be used + * within the sub parts of those composite identifiers to do pattern matching. For convenience, the syntax + * <code>groupId</code> is equivalent to <code>groupId:*:*:*</code>, <code>groupId:artifactId</code> is equivalent + * to <code>groupId:artifactId:*:*</code> and <code>groupId:artifactId:classifier</code> is equivalent to + * <code>groupId:artifactId:*:classifier</code>. + * * @parameter */ private ArtifactSet artifactSet; @@ -193,16 +198,12 @@ private ResourceTransformer[] transformers; /** - * Archive Filters to be used. Allows you to specify an artifact in the form of - * <code>groupId:artifactId:type:classifier</code> and a set of include/exclude file patterns for filtering which - * contents of the archive are added to the shaded jar. Just like the include/exclude patterns, the artifact - * coordinates for the filter support the wildcard characters '*' and '?'. For convenience, the syntax - * <code>groupId</code> is equivalent to <code>groupId:*:*:*</code>, <code>groupId:artifactId</code> is equivalent - * to <code>groupId:artifactId:*:*</code> and <code>groupId:artifactId:classifier</code> is equivalent to - * <code>groupId:artifactId:*:classifier</code>. From a logical perspective, includes are processed before excludes, - * thus it's possible to use an include to collect a set of files from the archive then use excludes to further - * reduce the set. By default, all files are included and no files are excluded. If multiple filters apply to an - * artifact, the intersection of the matched files will be included in the final JAR. + * Archive Filters to be used. Allows you to specify an artifact in the form of a composite identifier as used by + * {...@link #artifactSet} and a set of include/exclude file patterns for filtering which contents of the archive are + * added to the shaded jar. From a logical perspective, includes are processed before excludes, thus it's possible + * to use an include to collect a set of files from the archive then use excludes to further reduce the set. By + * default, all files are included and no files are excluded. If multiple filters apply to an artifact, the + * intersection of the matched files will be included in the final JAR. * * @parameter */ @@ -327,11 +328,13 @@ } } + ArtifactSelector artifactSelector = new ArtifactSelector( artifactSet, shadedGroupFilter ); + for ( Iterator it = project.getArtifacts().iterator(); it.hasNext(); ) { Artifact artifact = (Artifact) it.next(); - if ( excludeArtifact( artifact ) ) + if ( !artifactSelector.isSelected( artifact ) ) { getLog().info( "Excluding " + artifact.getId() + " from the shaded jar." ); @@ -529,51 +532,6 @@ return null; } - private boolean excludeArtifact( Artifact artifact ) - { - String id = getId( artifact ); - - // This is the case where we have only stated artifacts to include and no exclusions - // have been listed. We just want what we have asked to include. - if ( artifactSet != null && ( artifactSet.getExcludes() == null && artifactSet.getIncludes() != null ) - && !includedArtifacts().contains( id ) ) - { - return true; - } - - if ( excludedArtifacts().contains( id ) ) - { - return true; - } - - if ( shadedGroupFilter != null && !artifact.getGroupId().startsWith( shadedGroupFilter ) ) - { - return true; - } - - return false; - } - - private Set excludedArtifacts() - { - if ( artifactSet != null && artifactSet.getExcludes() != null ) - { - return artifactSet.getExcludes(); - } - - return Collections.EMPTY_SET; - } - - private Set includedArtifacts() - { - if ( artifactSet != null && artifactSet.getIncludes() != null ) - { - return artifactSet.getIncludes(); - } - - return Collections.EMPTY_SET; - } - private List getRelocators() { List relocators = new ArrayList(); @@ -805,24 +763,18 @@ private String getId( Artifact artifact ) { - return getId( artifact.getGroupId(), artifact.getArtifactId(), artifact.getClassifier() ); + return getId( artifact.getGroupId(), artifact.getArtifactId(), artifact.getType(), artifact.getClassifier() ); } private String getId( Dependency dependency ) { - return getId( dependency.getGroupId(), dependency.getArtifactId(), dependency.getClassifier() ); + return getId( dependency.getGroupId(), dependency.getArtifactId(), dependency.getType(), + dependency.getClassifier() ); } - private String getId( String groupId, String artifactId, String classifier ) + private String getId( String groupId, String artifactId, String type, String classifier ) { - if ( classifier == null || "jar".equals( classifier ) ) - { - return groupId + ":" + artifactId; - } - else - { - return groupId + ":" + artifactId + ":" + classifier; - } + return groupId + ":" + artifactId + ":" + type + ":" + ( ( classifier != null ) ? classifier : "" ); } public boolean updateExcludesInDeps( MavenProject project, Modified: maven/plugins/trunk/maven-shade-plugin/src/site/apt/examples/includes-excludes.apt.vm URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/site/apt/examples/includes-excludes.apt.vm?rev=894514&r1=894513&r2=894514&view=diff ============================================================================== --- maven/plugins/trunk/maven-shade-plugin/src/site/apt/examples/includes-excludes.apt.vm (original) +++ maven/plugins/trunk/maven-shade-plugin/src/site/apt/examples/includes-excludes.apt.vm Tue Dec 29 23:30:39 2009 @@ -47,8 +47,8 @@ <excludes> <exclude>classworlds:classworlds</exclude> <exclude>junit:junit</exclude> - <exclude>jmock:jmock</exclude> - <exclude>xml-apis:xml-apis</exclude> + <exclude>jmock:*</exclude> + <exclude>*:xml-apis</exclude> </excludes> </artifactSet> </configuration> @@ -62,7 +62,9 @@ +----- Of course, <<<\<includes\>>>> can be used as well to specify a white list of artifacts. Artifacts are denoted by a - composite idenitifer of the form <groupId>:<artifactId>[:<classifier>]. + composite idenitifer of the form <groupId>:<artifactId>[[:<type>]:<classifier>]. Since plugin version 1.3, the + wildcard characters '*' and '?' can be used to do glob-like pattern matching. + For fine-grained control of which classes from the selected dependencies are included, artifact filters can be used: Added: maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ArtifactSelectorTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ArtifactSelectorTest.java?rev=894514&view=auto ============================================================================== --- maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ArtifactSelectorTest.java (added) +++ maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ArtifactSelectorTest.java Tue Dec 29 23:30:39 2009 @@ -0,0 +1,65 @@ +package org.apache.maven.plugins.shade.mojo; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.Collections; + +import junit.framework.TestCase; + +/** + * @author Benjamin Bentmann + */ +public class ArtifactSelectorTest + extends TestCase +{ + + public void testIsSelected() + { + ArtifactSelector selector; + + selector = new ArtifactSelector( null, null, null ); + assertTrue( selector.isSelected( new ArtifactId( "gid", "aid", "type", "cls" ) ) ); + + selector = new ArtifactSelector( null, null, "" ); + assertTrue( selector.isSelected( new ArtifactId( "gid", "aid", "type", "cls" ) ) ); + + selector = new ArtifactSelector( null, null, "gid" ); + assertTrue( selector.isSelected( new ArtifactId( "gid", "aid", "type", "cls" ) ) ); + assertTrue( selector.isSelected( new ArtifactId( "gid.test", "aid", "type", "cls" ) ) ); + assertFalse( selector.isSelected( new ArtifactId( "id", "aid", "type", "cls" ) ) ); + + selector = new ArtifactSelector( Collections.EMPTY_SET, Collections.EMPTY_SET, null ); + assertTrue( selector.isSelected( new ArtifactId( "gid", "aid", "type", "cls" ) ) ); + + selector = new ArtifactSelector( Collections.singleton( "gid:aid" ), Collections.EMPTY_SET, null ); + assertTrue( selector.isSelected( new ArtifactId( "gid", "aid", "type", "cls" ) ) ); + assertFalse( selector.isSelected( new ArtifactId( "gid", "id", "type", "cls" ) ) ); + + selector = new ArtifactSelector( Collections.EMPTY_SET, Collections.singleton( "gid:aid" ), null ); + assertFalse( selector.isSelected( new ArtifactId( "gid", "aid", "type", "cls" ) ) ); + assertTrue( selector.isSelected( new ArtifactId( "gid", "id", "type", "cls" ) ) ); + + selector = new ArtifactSelector( Collections.singleton( "gid:*" ), Collections.singleton( "*:aid" ), null ); + assertTrue( selector.isSelected( new ArtifactId( "gid", "id", "type", "cls" ) ) ); + assertFalse( selector.isSelected( new ArtifactId( "gid", "aid", "type", "cls" ) ) ); + assertFalse( selector.isSelected( new ArtifactId( "gid.test", "id", "type", "cls" ) ) ); + } + +} Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ArtifactSelectorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/mojo/ArtifactSelectorTest.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision