You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2006/05/03 16:58:43 UTC
svn commit: r399323 - in /maven/plugins/trunk/maven-assembly-plugin/src:
main/java/org/apache/maven/plugin/assembly/
main/java/org/apache/maven/plugin/assembly/interpolation/
test/java/org/apache/maven/plugin/assembly/interpolation/
Author: jdcasey
Date: Wed May 3 07:58:22 2006
New Revision: 399323
URL: http://svn.apache.org/viewcvs?rev=399323&view=rev
Log:
[MASSEMBLY-89] Added blacklisting of certain expressions for the outputFileNameMapping element, in an extensible way that we can build on for other similar scenarios. Also added a unit test for this problem.
Added:
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java (with props)
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java
Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java?rev=399323&r1=399322&r2=399323&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java Wed May 3 07:58:22 2006
@@ -1168,7 +1168,7 @@
String left = evaluateFileNameMapping( mat.group( 1 ), artifact );
try
{
- middle = ReflectionValueExtractor.evaluate( "dep." + mat.group( 2 ), artifact );
+ middle = ReflectionValueExtractor.evaluate( mat.group( 2 ), artifact, false );
}
catch ( Exception e )
{
Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java?rev=399323&r1=399322&r2=399323&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java Wed May 3 07:58:22 2006
@@ -14,6 +14,10 @@
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.regex.Matcher;
@@ -22,7 +26,25 @@
public class AssemblyInterpolator
extends AbstractLogEnabled
{
+ private static final Pattern ELEMENT_PATTERN = Pattern.compile( "\\<([^> ]+)[^>]*>([^<]+)" );
private static final Pattern EXPRESSION_PATTERN = Pattern.compile( "\\$\\{(pom\\.|project\\.|env\\.)?([^}]+)\\}" );
+
+ private static final Map INTERPOLATION_BLACKLIST;
+
+ static
+ {
+ Map blacklist = new HashMap();
+
+ List ofnmBlacklistings = new ArrayList();
+
+ ofnmBlacklistings.add( "groupId" );
+ ofnmBlacklistings.add( "artifactId" );
+ ofnmBlacklistings.add( "version" );
+
+ blacklist.put( "outputFileNameMapping", ofnmBlacklistings );
+
+ INTERPOLATION_BLACKLIST = blacklist;
+ }
private Properties envars;
@@ -80,17 +102,61 @@
throw new AssemblyInterpolationException(
"Cannot read assembly descriptor from interpolating filter of serialized version.", e );
}
+
return assembly;
}
- private String interpolateInternal( String result, Assembly assembly, Model model, Map context )
+ private String interpolateInternal( String src, Assembly assembly, Model model, Map context )
throws AssemblyInterpolationException
{
+ String result = src;
+
+ Matcher elementMatcher = ELEMENT_PATTERN.matcher( result );
+
+ while( elementMatcher.find() )
+ {
+ String element = elementMatcher.group( 0 );
+
+ String elementName = elementMatcher.group( 1 );
+ String value = elementMatcher.group( 2 );
+
+ // only attempt to interpolate if the following is met:
+ // 1. the element is not in the interpolation blacklist.
+ // 2. the value is not empty (otherwise there's nothing to interpolate)
+ // 3. the value contains a "${" (a pretty good clue that there's an expression in it)
+ if ( StringUtils.isNotEmpty( value ) && value.indexOf( "${" ) > -1 )
+ {
+ List blacklistedExpressions = (List) INTERPOLATION_BLACKLIST.get( elementName );
+ if ( blacklistedExpressions == null )
+ {
+ blacklistedExpressions = Collections.EMPTY_LIST;
+ }
+
+ String interpolatedValue = interpolateElementValue( value, assembly, model, context, blacklistedExpressions );
+
+ String modifiedElement = StringUtils.replace( element, value, interpolatedValue );
+ result = StringUtils.replace( result, element, modifiedElement );
+ }
+ }
+
+ return result;
+ }
+
+ private String interpolateElementValue( String src, Assembly assembly, Model model, Map context, List blacklistedExpressions )
+ throws AssemblyInterpolationException
+ {
+ String result = src;
+
Matcher matcher = EXPRESSION_PATTERN.matcher( result );
while ( matcher.find() )
{
String wholeExpr = matcher.group( 0 );
- String realExpr = parseExpression( wholeExpr );
+ String realExpr = matcher.group( 2 );
+
+ if ( blacklistedExpressions.contains( realExpr ) )
+ {
+ continue;
+ }
Object value = context.get( realExpr );
@@ -137,15 +203,5 @@
}
}
return result;
- }
-
- private String parseExpression( String expression )
- {
- int startIndex = expression.indexOf( "{" );
- int endIndex = expression.indexOf( "}" );
-
- expression = expression.substring( startIndex + 1, endIndex );
-
- return expression;
}
}
Added: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java?rev=399323&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java Wed May 3 07:58:22 2006
@@ -0,0 +1,44 @@
+package org.apache.maven.plugin.assembly.interpolation;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.plugins.assembly.model.Assembly;
+import org.apache.maven.plugins.assembly.model.DependencySet;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class AssemblyInterpolatorTest
+ extends TestCase
+{
+
+ public void testDependencyOutputFileNameMappingsAreNotInterpolated()
+ throws IOException, AssemblyInterpolationException
+ {
+ AssemblyInterpolator interpolator = new AssemblyInterpolator();
+
+ Model model = new Model();
+ model.setArtifactId( "artifact-id" );
+ model.setGroupId( "group.id" );
+ model.setVersion( "1" );
+
+ Assembly assembly = new Assembly();
+
+ DependencySet set = new DependencySet();
+ set.setOutputFileNameMapping( "${artifactId}.${extension}" );
+
+ assembly.addDependencySet( set );
+
+ Assembly outputAssembly = interpolator.interpolate( assembly, model, Collections.EMPTY_MAP );
+
+ List outputDependencySets = outputAssembly.getDependencySets();
+ assertEquals( 1, outputDependencySets.size() );
+
+ DependencySet outputSet = (DependencySet) outputDependencySets.get( 0 );
+
+ assertEquals( set.getOutputFileNameMapping(), outputSet.getOutputFileNameMapping() );
+ }
+
+}
Propchange: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"