You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2017/12/20 09:36:20 UTC

[maven-invoker-plugin] 13/22: [MINVOKER-9] Interpolate goal files with project and new properties field

This is an automated email from the ASF dual-hosted git repository.

hboutemy pushed a commit to annotated tag maven-invoker-plugin-1.1
in repository https://gitbox.apache.org/repos/asf/maven-invoker-plugin.git

commit 14816a55c03831a43fdc4a0f86747f655761e8aa
Author: Oliver Lamy <ol...@apache.org>
AuthorDate: Thu Nov 22 23:03:30 2007 +0000

    [MINVOKER-9] Interpolate goal files with project and new properties field
    
    
    git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-invoker-plugin@597507 13f79535-47bb-0310-9956-ffa450edef68
---
 .../apache/maven/plugin/invoker/CompositeMap.java  | 176 +++++++++++++++++++++
 .../apache/maven/plugin/invoker/InvokerMojo.java   |  53 +++++--
 .../plugin/invoker/ExtendedMavenProjectStub.java   |  43 +++++
 .../maven/plugin/invoker/InterpolationTest.java    |  80 ++++++++++
 .../maven/plugin/invoker/InvokerMojoTest.java      |   2 -
 src/test/resources/unit/interpolation/goals.txt    |   2 +
 6 files changed, 340 insertions(+), 16 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugin/invoker/CompositeMap.java b/src/main/java/org/apache/maven/plugin/invoker/CompositeMap.java
new file mode 100755
index 0000000..7792946
--- /dev/null
+++ b/src/main/java/org/apache/maven/plugin/invoker/CompositeMap.java
@@ -0,0 +1,176 @@
+/*
+ * 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.
+ */
+package org.apache.maven.plugin.invoker;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
+
+/**
+ * @author <a href="mailto:olamy@apache.org">olamy</a>
+ * @since 22 nov. 07
+ * @version $Id$
+ */
+class CompositeMap
+    implements Map
+{
+    
+    private MavenProject mavenProject;
+    
+    private Properties properties;
+    
+    protected CompositeMap(MavenProject mavenProject, Properties properties)
+    {
+        this.mavenProject = mavenProject;
+        this.properties = properties == null ? new Properties() : properties;
+    }
+
+    /** 
+     * @see java.util.Map#clear()
+     */
+    public void clear()
+    {
+        // nothing here
+
+    }
+
+    /** 
+     * @see java.util.Map#containsKey(java.lang.Object)
+     */
+    public boolean containsKey( Object key )
+    {
+        if ( key == null )
+        {
+            return false;
+        }
+        try
+        {
+            Object evaluated = ReflectionValueExtractor.evaluate( (String) key, this.mavenProject );
+            return evaluated == null;
+        }
+        catch ( Exception e )
+        {
+            // uhm do we have to throw a RuntimeException here ? 
+        }
+        return properties.containsKey( key );
+    }
+
+    /** 
+     * @see java.util.Map#containsValue(java.lang.Object)
+     */
+    public boolean containsValue( Object value )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /** 
+     * @see java.util.Map#entrySet()
+     */
+    public Set entrySet()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /** 
+     * @see java.util.Map#get(java.lang.Object)
+     */
+    public Object get( Object key )
+    {
+        if ( key == null )
+        {
+            return null;
+        }
+        try
+        {
+            Object evaluated = ReflectionValueExtractor.evaluate( (String) key, this.mavenProject );
+            if ( evaluated != null )
+            {
+                return evaluated;
+            }
+        }
+        catch ( Exception e )
+        {
+            // uhm do we have to throw a RuntimeException here ? 
+        }
+        return properties.get( key );
+    }
+
+    /** 
+     * @see java.util.Map#isEmpty()
+     */
+    public boolean isEmpty()
+    {
+        return this.mavenProject == null && this.properties.isEmpty();
+    }
+
+    /** 
+     * @see java.util.Map#keySet()
+     */
+    public Set keySet()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /** 
+     * @see java.util.Map#put(java.lang.Object, java.lang.Object)
+     */
+    public Object put( Object key, Object value )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /** 
+     * @see java.util.Map#putAll(java.util.Map)
+     */
+    public void putAll( Map t )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /** 
+     * @see java.util.Map#remove(java.lang.Object)
+     */
+    public Object remove( Object key )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /** 
+     * @see java.util.Map#size()
+     */
+    public int size()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /** 
+     * @see java.util.Map#values()
+     */
+    public Collection values()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    
+    
+}
diff --git a/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java b/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java
index 3c5d486..1444404 100644
--- a/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java
+++ b/src/main/java/org/apache/maven/plugin/invoker/InvokerMojo.java
@@ -19,9 +19,25 @@ package org.apache.maven.plugin.invoker;
  * under the License.
  */
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.invoker.CommandLineConfigurationException;
 import org.apache.maven.shared.invoker.DefaultInvocationRequest;
 import org.apache.maven.shared.invoker.InvocationRequest;
@@ -33,21 +49,9 @@ import org.apache.maven.shared.model.fileset.FileSet;
 import org.apache.maven.shared.model.fileset.util.FileSetManager;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.InterpolationFilterReader;
 import org.codehaus.plexus.util.cli.CommandLineException;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
 import bsh.EvalError;
 import bsh.Interpreter;
 
@@ -202,10 +206,29 @@ public class InvokerMojo
 
     /**
      * List of profileId's to explicitly trigger in the build.
+     * 
      * @parameter
      * @since 1.1
      */
     private List profiles;
+    
+    /**
+     * List properties which will be used to interpolate goal files.
+     * 
+     * @parameter
+     * @since 1.1
+     */    
+    private Properties interpolationsProperties;
+    
+    /**
+     * The Maven Project Object
+     *
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     * @since 1.1
+     */
+    private MavenProject project;    
 
     public void execute()
         throws MojoExecutionException, MojoFailureException
@@ -824,7 +847,9 @@ public class InvokerMojo
 
         try
         {
-            reader = new BufferedReader( new FileReader( projectGoalList ) );
+            Map composite = new CompositeMap(this.project, this.interpolationsProperties);
+            reader = new BufferedReader( new InterpolationFilterReader( new FileReader( projectGoalList ), composite ) );
+            /// new BufferedReader( new FileReader( projectGoalList ) );
 
             result = new ArrayList();
 
diff --git a/src/test/java/org/apache/maven/plugin/invoker/ExtendedMavenProjectStub.java b/src/test/java/org/apache/maven/plugin/invoker/ExtendedMavenProjectStub.java
new file mode 100755
index 0000000..c598b94
--- /dev/null
+++ b/src/test/java/org/apache/maven/plugin/invoker/ExtendedMavenProjectStub.java
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+package org.apache.maven.plugin.invoker;
+
+import org.apache.maven.model.Scm;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+
+/**
+ * @author <a href="mailto:olamy@apache.org">olamy</a>
+ * @since 22 nov. 07
+ * @version $Id$
+ */
+public class ExtendedMavenProjectStub
+    extends MavenProjectStub
+{
+    private Scm scm;
+
+    public Scm getScm()
+    {
+        return scm;
+    }
+
+    public void setScm( Scm scm )
+    {
+        this.scm = scm;
+    }
+}
diff --git a/src/test/java/org/apache/maven/plugin/invoker/InterpolationTest.java b/src/test/java/org/apache/maven/plugin/invoker/InterpolationTest.java
new file mode 100755
index 0000000..0a4ec44
--- /dev/null
+++ b/src/test/java/org/apache/maven/plugin/invoker/InterpolationTest.java
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ */
+package org.apache.maven.plugin.invoker;
+
+import java.io.File;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.model.Scm;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+
+/**
+ * @author <a href="mailto:olamy@apache.org">olamy</a>
+ * @since 22 nov. 07
+ * @version $Id$
+ */
+public class InterpolationTest
+    extends AbstractMojoTestCase
+{
+    
+    protected MavenProjectStub buildMavenProjectStub()
+    {
+        ExtendedMavenProjectStub project = new ExtendedMavenProjectStub();
+        project.setVersion( "1.0-SNAPSHOT" );
+        project.setArtifactId( "foo" );
+        project.setGroupId( "bar" );
+        Scm scm = new Scm();
+        scm.setConnection( "http://blabla" );
+        project.setScm( scm );
+        return project;
+    }
+    
+    public void testCompositeMap()
+        throws Exception
+    {
+
+        Properties properties = new Properties();
+        properties.put( "foo", "bar" );
+        properties.put( "version", "2.0-SNAPSHOT" );
+        CompositeMap compositeMap = new CompositeMap( buildMavenProjectStub(), properties );
+        assertEquals( "1.0-SNAPSHOT", compositeMap.get( "pom.version" ) );
+        assertEquals( "bar", compositeMap.get( "foo" ) );
+        assertEquals( "bar", compositeMap.get( "pom.groupId" ) );
+        assertEquals( "http://blabla", compositeMap.get( "pom.scm.connection" ) );
+    }
+    
+    public void testInterpolationGoalsFile()
+        throws Exception
+    {
+        InvokerMojo invokerMojo = new InvokerMojo();
+        setVariableValueToObject( invokerMojo, "goalsFile", "goals.txt" );
+        setVariableValueToObject( invokerMojo, "project", buildMavenProjectStub() );
+        Properties properties = new Properties();
+        properties.put( "cleanProps", "clean" );
+        properties.put( "version", "2.0-SNAPSHOT" );
+        setVariableValueToObject( invokerMojo, "interpolationsProperties", properties );
+        String dirPath = getBasedir() + "/src/test/resources/unit/interpolation/";
+        List goals = invokerMojo.getGoals( new File( dirPath ) );
+        assertEquals( goals.toString(), 2, goals.size() );
+        assertEquals( "clean", goals.get( 0 ) );
+        assertEquals( "bar:foo:1.0-SNAPSHOT:mygoal", goals.get( 1 ) );
+    }
+}
diff --git a/src/test/java/org/apache/maven/plugin/invoker/InvokerMojoTest.java b/src/test/java/org/apache/maven/plugin/invoker/InvokerMojoTest.java
index 068a761..b676f2b 100644
--- a/src/test/java/org/apache/maven/plugin/invoker/InvokerMojoTest.java
+++ b/src/test/java/org/apache/maven/plugin/invoker/InvokerMojoTest.java
@@ -21,9 +21,7 @@ package org.apache.maven.plugin.invoker;
 
 import java.io.File;
 import java.util.ArrayList;
-import java.util.Enumeration;
 import java.util.List;
-import java.util.Properties;
 
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.apache.maven.shared.invoker.Invoker;
diff --git a/src/test/resources/unit/interpolation/goals.txt b/src/test/resources/unit/interpolation/goals.txt
new file mode 100755
index 0000000..b9d46e8
--- /dev/null
+++ b/src/test/resources/unit/interpolation/goals.txt
@@ -0,0 +1,2 @@
+${cleanProps} 
+${pom.groupId}:${pom.artifactId}:${pom.version}:mygoal
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@maven.apache.org" <co...@maven.apache.org>.