You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by jd...@apache.org on 2005/07/14 00:58:29 UTC

svn commit: r216282 - in /maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main: java/org/apache/maven/plugin/assembly/AssemblyMojo.java mdo/descriptor.mdo

Author: jdcasey
Date: Wed Jul 13 15:58:28 2005
New Revision: 216282

URL: http://svn.apache.org/viewcvs?rev=216282&view=rev
Log:
Applying partial patch for MNG-266. Thanks Andreas.

Modified:
    maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java
    maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/mdo/descriptor.mdo

Modified: maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java?rev=216282&r1=216281&r2=216282&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java (original)
+++ maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java Wed Jul 13 15:58:28 2005
@@ -17,6 +17,8 @@
  */
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.IncludesArtifactFilter;
@@ -32,6 +34,7 @@
 import org.codehaus.plexus.archiver.jar.JarArchiver;
 import org.codehaus.plexus.archiver.tar.TarArchiver;
 import org.codehaus.plexus.archiver.zip.ZipArchiver;
+import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
 import org.codehaus.plexus.util.IOUtil;
 
 import java.io.File;
@@ -48,6 +51,8 @@
 import java.util.Set;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
@@ -104,6 +109,14 @@
      */
     private File workDirectory;
 
+    /**
+     * Handler to get the file extension matching a given artifactType
+     *
+     * @parameter expression="${component.org.apache.maven.artifact.handler.manager.ArtifactHandlerManager}"
+     * @required
+     */
+    private ArtifactHandlerManager artifactHandlerManager;
+ 
     public void execute()
         throws MojoExecutionException
     {
@@ -176,23 +189,23 @@
     }
 
     private void processDependencySets( Archiver archiver, List dependencySets, boolean includeBaseDirectory )
-        throws ArchiverException, IOException
+        throws ArchiverException, IOException, Exception
     {
         for ( Iterator i = dependencySets.iterator(); i.hasNext(); )
         {
-            DependencySet depedencySet = (DependencySet) i.next();
-            String output = depedencySet.getOutputDirectory();
+            DependencySet dependencySet = (DependencySet) i.next();
+            String output = dependencySet.getOutputDirectory();
             output = getOutputDirectory( output, includeBaseDirectory );
 
             AndArtifactFilter filter = new AndArtifactFilter();
-            filter.add( new ScopeArtifactFilter( depedencySet.getScope() ) );
-            if ( !depedencySet.getIncludes().isEmpty() )
+            filter.add( new ScopeArtifactFilter( dependencySet.getScope() ) );
+            if ( !dependencySet.getIncludes().isEmpty() )
             {
-                filter.add( new IncludesArtifactFilter( depedencySet.getIncludes() ) );
+                filter.add( new IncludesArtifactFilter( dependencySet.getIncludes() ) );
             }
-            if ( !depedencySet.getExcludes().isEmpty() )
+            if ( !dependencySet.getExcludes().isEmpty() )
             {
-                filter.add( new ExcludesArtifactFilter( depedencySet.getExcludes() ) );
+                filter.add( new ExcludesArtifactFilter( dependencySet.getExcludes() ) );
             }
 
             // TODO: includes and excludes
@@ -203,7 +216,7 @@
                 if ( filter.include( artifact ) )
                 {
                     String name = artifact.getFile().getName();
-                    if ( depedencySet.isUnpack() )
+                    if ( dependencySet.isUnpack() )
                     {
                         // TODO: something like zipfileset in plexus-archiver
 //                        archiver.addJar(  )
@@ -229,11 +242,48 @@
                     }
                     else
                     {
-                        archiver.addFile( artifact.getFile(), output + name );
-                    }
+                        archiver.addFile( artifact.getFile(), output + evaluateFileNameMapping( dependencySet.getOutputFileNameMapping(), artifact ));
+                    }                    
+                }
+            }
+        }
+    }
+
+    private String evaluateFileNameMapping( String expression, Artifact artifact ) 
+        throws Exception
+    {
+        // this matches the last ${...} string
+        Pattern pat = Pattern.compile( "^(.*)\\$\\{([^\\}]+)\\}(.*)$" );
+        Matcher mat = pat.matcher(expression);
+
+        String left,right;
+        Object middle;
+
+        if ( mat.matches() ) 
+        {
+            left   = evaluateFileNameMapping( mat.group(1), artifact );
+            middle = ReflectionValueExtractor.evaluate( "dep." + mat.group(2), artifact );
+            right  = mat.group(3);
+
+            if ( middle == null )
+            {
+                // TODO: There should be a more generic way dealing with that. Having magic words is not good at all.
+                // probe for magic word
+                if ( mat.group(2).trim().equals( "extension" ))  
+                {
+                    ArtifactHandler artifactHandler  = artifactHandlerManager.getArtifactHandler( artifact.getType() );
+                    middle = artifactHandler.getExtension();
+                }
+                else
+                {
+                    middle = "${" + mat.group(2) + "}";
                 }
             }
+           
+            return left + middle + right;
         }
+
+        return expression;
     }
 
     private void unpackJar( File file, File tempLocation )

Modified: maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/mdo/descriptor.mdo
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/mdo/descriptor.mdo?rev=216282&r1=216281&r2=216282&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/mdo/descriptor.mdo (original)
+++ maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/mdo/descriptor.mdo Wed Jul 13 15:58:28 2005
@@ -95,6 +95,12 @@
           <type>String</type>
         </field>
         <field>
+          <name>outputFileNameMapping</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <defaultValue>${artifactId}-${version}.${extension}</defaultValue>
+        </field>
+        <field>
           <name>unpack</name>
           <type>boolean</type>
           <defaultValue>false</defaultValue>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org