You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by br...@apache.org on 2005/08/26 09:30:32 UTC

svn commit: r240177 - in /maven/components/trunk/maven-project/src: main/java/org/apache/maven/project/ main/java/org/apache/maven/project/interpolation/ test/java/org/apache/maven/project/interpolation/

Author: brett
Date: Fri Aug 26 00:30:21 2005
New Revision: 240177

URL: http://svn.apache.org/viewcvs?rev=240177&view=rev
Log:
PR: MNG-789
interpolate ${basedir} in the model

Modified:
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=240177&r1=240176&r2=240177&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Fri Aug 26 00:30:21 2005
@@ -554,7 +554,10 @@
         activeProfiles.addAll( injectedProfiles );
 
         // TODO: Clean this up...we're using this to 'jump' the interpolation step for model properties not expressed in XML.
-        model = modelInterpolator.interpolate( model );
+        //  [BP] - Can this above comment be explained?
+        // We don't need all the project methods that are added over those in the model, but we do need basedir
+        Map context = Collections.singletonMap( "basedir", project.getBasedir() );
+        model = modelInterpolator.interpolate( model, context );
 
         // interpolation is before injection, because interpolation is off-limits in the injected variables
         modelDefaultsInjector.injectDefaults( model );
@@ -563,11 +566,7 @@
         
         Model originalModel = project.getOriginalModel();
 
-        //=======================================================================
-        //
-        // WATCH OUT FOR THIS LINE! in-project is NOT the same as out-project!!!
-        //
-        //=======================================================================
+        // We will return a different project object using the new model (hence the need to return a project, not just modify the parameter)
         project = new MavenProject( model );
 
         project.setOriginalModel( originalModel );

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java?rev=240177&r1=240176&r2=240177&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java Fri Aug 26 00:30:21 2005
@@ -18,6 +18,8 @@
 
 import org.apache.maven.model.Model;
 
+import java.util.Map;
+
 /**
  * @author jdcasey
  *         <p/>
@@ -27,7 +29,7 @@
 {
     String ROLE = ModelInterpolator.class.getName();
 
-    Model interpolate( Model project )
+    Model interpolate( Model project, Map context )
         throws ModelInterpolationException;
 
 }

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java?rev=240177&r1=240176&r2=240177&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java Fri Aug 26 00:30:21 2005
@@ -30,6 +30,7 @@
 import java.io.StringWriter;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.Map;
 
 /**
  * @author jdcasey Created on Feb 3, 2005
@@ -44,7 +45,7 @@
     /**
      * Added: Feb 3, 2005 by jdcasey
      */
-    public Model interpolate( Model model )
+    public Model interpolate( Model model, Map context )
         throws ModelInterpolationException
     {
         StringWriter sWriter = new StringWriter();
@@ -60,7 +61,7 @@
         }
 
         String serializedModel = sWriter.toString();
-        serializedModel = interpolateInternal( serializedModel, model );
+        serializedModel = interpolateInternal( serializedModel, model, context );
 
         StringReader sReader = new StringReader( serializedModel );
 
@@ -86,7 +87,7 @@
     /**
      * Added: Feb 3, 2005 by jdcasey
      */
-    private String interpolateInternal( String src, Model model )
+    private String interpolateInternal( String src, Model model, Map context )
     {
         String result = src;
         Matcher matcher = EXPRESSION_PATTERN.matcher( result );
@@ -95,11 +96,14 @@
             String wholeExpr = matcher.group( 0 );
             String realExpr = matcher.group( 2 );
 
-            Object value = null;
+            Object value = context.get( realExpr );
 
             try
             {
-                value = ReflectionValueExtractor.evaluate( realExpr, model );
+                if ( value == null )
+                {
+                    value = ReflectionValueExtractor.evaluate( realExpr, model );
+                }
             }
             catch ( Exception e )
             {

Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java?rev=240177&r1=240176&r2=240177&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java Fri Aug 26 00:30:21 2005
@@ -19,6 +19,10 @@
 import junit.framework.TestCase;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Model;
+import org.apache.maven.model.Repository;
+
+import java.util.Collections;
+import java.util.Map;
 
 /**
  * @author jdcasey
@@ -27,6 +31,16 @@
 public class RegexBasedModelInterpolatorTest
     extends TestCase
 {
+    private Map context;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        context = Collections.singletonMap( "basedir", "myBasedir" );
+    }
+
     public void testShouldInterpolateDependencyVersionToSetSameAsProjectVersion()
         throws ModelInterpolationException
     {
@@ -38,7 +52,7 @@
 
         model.addDependency( dep );
 
-        Model out = new RegexBasedModelInterpolator().interpolate( model );
+        Model out = new RegexBasedModelInterpolator().interpolate( model, context );
 
         assertEquals( "3.8.1", ( (Dependency) out.getDependencies().get( 0 ) ).getVersion() );
     }
@@ -54,7 +68,7 @@
 
         model.addDependency( dep );
 
-        Model out = new RegexBasedModelInterpolator().interpolate( model );
+        Model out = new RegexBasedModelInterpolator().interpolate( model, context );
 
         assertEquals( "${something}", ( (Dependency) out.getDependencies().get( 0 ) ).getVersion() );
     }
@@ -71,8 +85,27 @@
 
         model.addDependency( dep );
 
-        Model out = new RegexBasedModelInterpolator().interpolate( model );
+        Model out = new RegexBasedModelInterpolator().interpolate( model, context );
 
         assertEquals( "foo-3.8.1", ( (Dependency) out.getDependencies().get( 0 ) ).getVersion() );
+    }
+
+    public void testBasedir()
+        throws ModelInterpolationException
+    {
+        Model model = new Model();
+        model.setVersion( "3.8.1" );
+        model.setArtifactId( "foo" );
+
+        Repository repository = new Repository();
+
+        repository.setUrl( "file://localhost/${basedir}/temp-repo" );
+
+        model.addRepository( repository );
+
+        Model out = new RegexBasedModelInterpolator().interpolate( model, context );
+
+        assertEquals( "file://localhost/myBasedir/temp-repo",
+                      ( (Repository) out.getRepositories().get( 0 ) ).getUrl() );
     }
 }



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