Author: pgier Date: Wed Apr 8 18:57:33 2009 New Revision: 763350 URL: http://svn.apache.org/viewvc?rev=763350&view=rev Log: [MSOURCES-33] Add includes and excludes parameters.
Added: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/pom.xml (with props) maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass.java (with props) maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass2.java (with props) maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/resources/ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/resources/main.properties (with props) maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest.java (with props) maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest2.java (with props) maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/resources/ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/resources/test.properties (with props) maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/verify.bsh (with props) Modified: maven/plugins/trunk/maven-source-plugin/src/main/java/org/apache/maven/plugin/source/AbstractSourceJarMojo.java Added: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/pom.xml?rev=763350&view=auto ============================================================================== --- maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/pom.xml (added) +++ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/pom.xml Wed Apr 8 18:57:33 2009 @@ -0,0 +1,70 @@ +<?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 xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>test</groupId> + <artifactId>jar</artifactId> + <version>1.0-SNAPSHOT</version> + + <name>Test for jar</name> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-source-plugin</artifactId> + <version>@pom.version@</version> + <executions> + <execution> + <id>jar</id> + <goals> + <goal>jar</goal> + </goals> + <configuration> + <includes> + <include>MyClass2.java</include> + </includes> + </configuration> + </execution> + <execution> + <id>test-jar</id> + <goals> + <goal>test-jar</goal> + </goals> + <configuration> + <excludes> + <exclude>MyTest2.java</exclude> + </excludes> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass.java?rev=763350&view=auto ============================================================================== --- maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass.java (added) +++ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass.java Wed Apr 8 18:57:33 2009 @@ -0,0 +1,4 @@ +public class MyClass +{ + +} Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass2.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass2.java?rev=763350&view=auto ============================================================================== --- maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass2.java (added) +++ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass2.java Wed Apr 8 18:57:33 2009 @@ -0,0 +1,4 @@ +public class MyClass2 +{ + +} Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass2.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/java/MyClass2.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/resources/main.properties URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/resources/main.properties?rev=763350&view=auto ============================================================================== (empty) Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/resources/main.properties ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/main/resources/main.properties ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest.java?rev=763350&view=auto ============================================================================== --- maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest.java (added) +++ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest.java Wed Apr 8 18:57:33 2009 @@ -0,0 +1,4 @@ +public class MyTest +{ + +} Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest2.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest2.java?rev=763350&view=auto ============================================================================== --- maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest2.java (added) +++ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest2.java Wed Apr 8 18:57:33 2009 @@ -0,0 +1,4 @@ +public class MyTest2 +{ + +} Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest2.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/java/MyTest2.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/resources/test.properties URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/resources/test.properties?rev=763350&view=auto ============================================================================== (empty) Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/resources/test.properties ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/src/test/resources/test.properties ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/verify.bsh URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/verify.bsh?rev=763350&view=auto ============================================================================== --- maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/verify.bsh (added) +++ maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/verify.bsh Wed Apr 8 18:57:33 2009 @@ -0,0 +1,95 @@ +import java.io.*; +import java.util.*; +import java.util.jar.*; +import java.util.regex.*; + +try +{ + File jarFile = new File( basedir, "target/jar-1.0-SNAPSHOT-sources.jar" ); + System.out.println( "Checking for existence of " + jarFile ); + if ( !jarFile.isFile() ) + { + System.out.println( "FAILURE!" ); + return false; + } + + JarFile jar = new JarFile( jarFile ); + + String[] includedEntries = { + "META-INF/MANIFEST.MF", + "MyClass2.java" + }; + for ( String included : includedEntries ) + { + System.out.println( "Checking for existence of " + included ); + if ( jar.getEntry( included ) == null ) + { + System.out.println( "FAILURE!" ); + return false; + } + } + + String[] excludedEntries = { + "MyTest.java", + "test.properties", + "MyClass.java", + "main.properties", + }; + for ( String excluded : excludedEntries ) + { + System.out.println( "Checking for absence of " + excluded ); + if ( jar.getEntry( excluded ) != null ) + { + System.out.println( "FAILURE!" ); + return false; + } + } + + + File jarFile = new File( basedir, "target/jar-1.0-SNAPSHOT-test-sources.jar" ); + System.out.println( "Checking for existence of " + jarFile ); + if ( !jarFile.isFile() ) + { + System.out.println( "FAILURE!" ); + return false; + } + + JarFile jar = new JarFile( jarFile ); + + String[] includedEntries = { + "META-INF/MANIFEST.MF", + "MyTest.java", + "test.properties", + }; + for ( String included : includedEntries ) + { + System.out.println( "Checking for existence of " + included ); + if ( jar.getEntry( included ) == null ) + { + System.out.println( "FAILURE!" ); + return false; + } + } + + String[] excludedEntries = { + "MyTest2.java", + "MyClass.java" + }; + for ( String excluded : excludedEntries ) + { + System.out.println( "Checking for absence of " + excluded ); + if ( jar.getEntry( excluded ) != null ) + { + System.out.println( "FAILURE!" ); + return false; + } + } + +} +catch( Throwable t ) +{ + t.printStackTrace(); + return false; +} + +return true; Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/verify.bsh ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-source-plugin/src/it/jar-includes-excludes/verify.bsh ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/plugins/trunk/maven-source-plugin/src/main/java/org/apache/maven/plugin/source/AbstractSourceJarMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-source-plugin/src/main/java/org/apache/maven/plugin/source/AbstractSourceJarMojo.java?rev=763350&r1=763349&r2=763350&view=diff ============================================================================== --- maven/plugins/trunk/maven-source-plugin/src/main/java/org/apache/maven/plugin/source/AbstractSourceJarMojo.java (original) +++ maven/plugins/trunk/maven-source-plugin/src/main/java/org/apache/maven/plugin/source/AbstractSourceJarMojo.java Wed Apr 8 18:57:33 2009 @@ -42,20 +42,44 @@ /** * Base class for bundling sources into a jar archive. - * + * * @version $Id$ * @since 2.0.3 */ public abstract class AbstractSourceJarMojo extends AbstractMojo { - private static final String[] DEFAULT_INCLUDES = new String[]{"**/*"}; + private static final String[] DEFAULT_INCLUDES = new String[] { "**/*" }; + + private static final String[] DEFAULT_EXCLUDES = new String[] {}; + + /** + * List of files to include. Specified as fileset patterns which are relative to the input directory whose contents + * is being packaged into the JAR. + * + * @parameter + */ + private String[] includes; + + /** + * List of files to exclude. Specified as fileset patterns which are relative to the input directory whose contents + * is being packaged into the JAR. + * + * @parameter + */ + private String[] excludes; + + /** + * Exclude commonly excluded files such as SCM configuration. These are defined in the plexus + * FileUtils.getDefaultExcludes() + * + * @parameter default-value="true" + */ + private boolean useDefaultExcludes; - private static final String[] DEFAULT_EXCLUDES = new String[]{}; - /** * The Maven Project Object - * + * * @parameter expression="${project}" * @readonly * @required @@ -70,17 +94,17 @@ private JarArchiver jarArchiver; /** - * The archive configuration to use. - * See <a href="http://maven.apache.org/shared/maven-archiver/index.html">Maven Archiver Reference</a>. - * + * The archive configuration to use. See <a href="http://maven.apache.org/shared/maven-archiver/index.html">Maven + * Archiver Reference</a>. + * * @parameter * @since 2.1 */ private MavenArchiveConfiguration archive = new MavenArchiveConfiguration(); /** - * Path to the default MANIFEST file to use. It will be used if - * <code>useDefaultManifestFile</code> is set to <code>true</code>. + * Path to the default MANIFEST file to use. It will be used if <code>useDefaultManifestFile</code> is set to + * <code>true</code>. * * @parameter expression="${project.build.outputDirectory}/META-INF/MANIFEST.MF" * @required @@ -90,8 +114,7 @@ private File defaultManifestFile; /** - * Set this to <code>true</code> to enable the use of the <code>defaultManifestFile</code>. - * <br/> + * Set this to <code>true</code> to enable the use of the <code>defaultManifestFile</code>. <br/> * * @parameter default-value="false" * @since 2.1 @@ -199,7 +222,7 @@ { if ( !"pom".equals( p.getPackaging() ) ) { - packageSources( Arrays.asList( new Object[]{p} ) ); + packageSources( Arrays.asList( new Object[] { p } ) ); } } @@ -234,7 +257,7 @@ getLog().info( "Adding existing MANIFEST to archive. Found under: " + defaultManifestFile.getPath() ); archive.setManifestFile( defaultManifestFile ); } - + File outputFile = new File( outputDirectory, finalName + "-" + getClassifier() + getExtension() ); try { @@ -292,7 +315,7 @@ if ( sourceDirectory.exists() ) { - addDirectory( archiver, sourceDirectory, DEFAULT_INCLUDES, FileUtils.getDefaultExcludes() ); + addDirectory( archiver, sourceDirectory, getCombinedIncludes( null ), getCombinedExcludes( null ) ); } } @@ -309,30 +332,12 @@ } List resourceIncludes = resource.getIncludes(); - String includes[]; - if ( resourceIncludes == null || resourceIncludes.size() == 0 ) - { - includes = DEFAULT_INCLUDES; - } - else - { - includes = (String[]) resourceIncludes.toArray( new String[resourceIncludes.size()] ); - } + + String[] combinedIncludes = getCombinedIncludes( resourceIncludes ); List resourceExcludes = resource.getExcludes(); - String[] excludes; - if ( resourceExcludes == null || resourceExcludes.size() == 0 ) - { - excludes = FileUtils.getDefaultExcludes(); - } - else - { - List allExcludes = new ArrayList(); - allExcludes.addAll( FileUtils.getDefaultExcludesAsList() ); - allExcludes.addAll( resourceExcludes ); - excludes = (String[]) allExcludes.toArray( new String[allExcludes.size()] ); - } + String[] combinedExcludes = getCombinedExcludes( resourceExcludes ); String targetPath = resource.getTargetPath(); if ( targetPath != null ) @@ -341,11 +346,11 @@ { targetPath += "/"; } - addDirectory( archiver, sourceDirectory, targetPath, includes, excludes ); + addDirectory( archiver, sourceDirectory, targetPath, combinedIncludes, combinedExcludes ); } else { - addDirectory( archiver, sourceDirectory, includes, excludes ); + addDirectory( archiver, sourceDirectory, combinedIncludes, combinedExcludes ); } } } @@ -355,7 +360,7 @@ { MavenArchiver archiver = new MavenArchiver(); archiver.setArchiver( jarArchiver ); - + if ( project.getBuild() != null ) { List resources = project.getBuild().getResources(); @@ -366,7 +371,8 @@ if ( r.getDirectory().endsWith( "maven-shared-archive-resources" ) ) { - addDirectory( archiver.getArchiver(), new File( r.getDirectory() ), DEFAULT_INCLUDES, DEFAULT_EXCLUDES ); + addDirectory( archiver.getArchiver(), new File( r.getDirectory() ), getCombinedIncludes( null ), + getCombinedExcludes( null ) ); } } } @@ -420,4 +426,69 @@ { return "java-source"; } + + /** + * Combines the includes parameter and additional includes. Defaults to {...@link #DEFAULT_INCLUDES} If the + * additionalIncludes parameter is null, it is not added to the combined includes. + * + * @param additionalIncludes The includes specified in the pom resources section + * @return The combined array of includes. + */ + private String[] getCombinedIncludes( List additionalIncludes ) + { + ArrayList combinedIncludes = new ArrayList(); + + if ( includes != null && includes.length > 0 ) + { + combinedIncludes.addAll( Arrays.asList( includes ) ); + } + + if ( additionalIncludes != null && additionalIncludes.size() > 0 ) + { + combinedIncludes.addAll( additionalIncludes ); + } + + // If there are no other includes, use the default. + if ( combinedIncludes.size() == 0 ) + { + combinedIncludes.addAll( Arrays.asList( DEFAULT_INCLUDES ) ); + } + + return (String[]) combinedIncludes.toArray( new String[combinedIncludes.size()] ); + } + + /** + * Combines the user parameter {...@link #excludes}, the default excludes from plexus FileUtils, + * and the contents of the parameter addionalExcludes. + * + * @param additionalExcludes Additional excludes to add to the array + * @return The combined list of excludes. + */ + + private String[] getCombinedExcludes( List additionalExcludes ) + { + ArrayList combinedExcludes = new ArrayList(); + + if ( useDefaultExcludes ) + { + combinedExcludes.addAll( FileUtils.getDefaultExcludesAsList() ); + } + + if ( excludes != null && excludes.length > 0 ) + { + combinedExcludes.addAll( Arrays.asList( excludes ) ); + } + + if ( additionalExcludes != null && additionalExcludes.size() > 0 ) + { + combinedExcludes.addAll( additionalExcludes ); + } + + if ( combinedExcludes.size() == 0 ) + { + combinedExcludes.addAll( Arrays.asList( DEFAULT_EXCLUDES ) ); + } + + return (String[]) combinedExcludes.toArray( new String[combinedExcludes.size()] ); + } }