You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by pg...@apache.org on 2009/04/08 20:57:33 UTC

svn commit: r763350 - in /maven/plugins/trunk/maven-source-plugin/src: it/jar-includes-excludes/ it/jar-includes-excludes/src/ it/jar-includes-excludes/src/main/ it/jar-includes-excludes/src/main/java/ it/jar-includes-excludes/src/main/resources/ it/ja...

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()] );
+    }
 }