don't fork maven to determine version in embedded mode

Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1544917 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/it/Embedded3xLauncher.java b/src/main/java/org/apache/maven/it/Embedded3xLauncher.java
index d22758e..9629346 100644
--- a/src/main/java/org/apache/maven/it/Embedded3xLauncher.java
+++ b/src/main/java/org/apache/maven/it/Embedded3xLauncher.java
@@ -35,6 +35,8 @@
 import java.util.List;
 import java.util.Properties;
 
+import org.apache.maven.shared.utils.io.IOUtil;
+
 /**
  * Launches an embedded Maven 3.x instance from some Maven installation directory.
  * 
@@ -251,4 +253,36 @@
         }
     }
 
+    public String getMavenVersion()
+        throws LauncherException
+    {
+        Properties props = new Properties();
+
+        InputStream is =
+            mavenCli.getClass().getResourceAsStream( "/META-INF/maven/org.apache.maven/maven-core/pom.properties" );
+        if ( is != null )
+        {
+            try
+            {
+                props.load( is );
+            }
+            catch ( IOException e )
+            {
+                throw new LauncherException( "Failed to read Maven version", e );
+            }
+            finally
+            {
+                IOUtil.close( is );
+            }
+        }
+
+        String version = props.getProperty( "version" );
+        if ( version != null )
+        {
+            return version;
+        }
+
+        throw new LauncherException( "Could not determine embedded Maven version" );
+    }
+
 }
diff --git a/src/main/java/org/apache/maven/it/ForkedLauncher.java b/src/main/java/org/apache/maven/it/ForkedLauncher.java
index 2af6fc7..6d149b6 100644
--- a/src/main/java/org/apache/maven/it/ForkedLauncher.java
+++ b/src/main/java/org/apache/maven/it/ForkedLauncher.java
@@ -24,13 +24,19 @@
 import java.io.IOException;
 import java.io.Writer;
 import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
+import org.apache.maven.shared.utils.StringUtils;
 import org.apache.maven.shared.utils.cli.CommandLineException;
 import org.apache.maven.shared.utils.cli.CommandLineUtils;
 import org.apache.maven.shared.utils.cli.Commandline;
 import org.apache.maven.shared.utils.cli.StreamConsumer;
 import org.apache.maven.shared.utils.cli.WriterStreamConsumer;
+import org.apache.maven.shared.utils.io.FileUtils;
 
 /**
  * @author Benjamin Bentmann
@@ -50,7 +56,7 @@
         this( mavenHome, Collections.<Object, Object> emptyMap(), false );
     }
 
-    public ForkedLauncher( String mavenHome, Map<Object,Object> envVars, boolean debugJvm )
+    public ForkedLauncher( String mavenHome, Map<Object, Object> envVars, boolean debugJvm )
     {
         this.mavenHome = mavenHome;
         this.envVars = envVars;
@@ -129,4 +135,59 @@
         return run( cliArgs, envVars, workingDirectory, logFile );
     }
 
+    public String getMavenVersion()
+        throws IOException, LauncherException
+    {
+        File logFile;
+        try
+        {
+            logFile = File.createTempFile( "maven", "log" );
+        }
+        catch ( IOException e )
+        {
+            throw new LauncherException( "Error creating temp file", e );
+        }
+
+        // disable EMMA runtime controller port allocation, should be harmless if EMMA is not used
+        Map<?, ?> envVars = Collections.singletonMap( "MAVEN_OPTS", "-Demma.rt.control=false" );
+        run( new String[] { "--version" }, envVars, null, logFile );
+
+        List<String> logLines = FileUtils.loadFile( logFile );
+        // noinspection ResultOfMethodCallIgnored
+        logFile.delete();
+
+        String version = extractMavenVersion( logLines );
+
+        if ( version == null )
+        {
+            throw new LauncherException(
+                                         "Illegal maven output: String 'Maven version: ' not found in the following output:\n"
+                                             + StringUtils.join( logLines.iterator(), "\n" ) );
+        }
+        else
+        {
+            return version;
+        }
+    }
+
+    static String extractMavenVersion( List<String> logLines )
+    {
+        String version = null;
+
+        final Pattern MAVEN_VERSION = Pattern.compile( "(?i).*Maven [^0-9]*([0-9]\\S*).*" );
+
+        for ( Iterator<String> it = logLines.iterator(); version == null && it.hasNext(); )
+        {
+            String line = it.next();
+
+            Matcher m = MAVEN_VERSION.matcher( line );
+            if ( m.matches() )
+            {
+                version = m.group( 1 );
+            }
+        }
+
+        return version;
+    }
+
 }
diff --git a/src/main/java/org/apache/maven/it/MavenLauncher.java b/src/main/java/org/apache/maven/it/MavenLauncher.java
index 8084cdf..4aad2cf 100644
--- a/src/main/java/org/apache/maven/it/MavenLauncher.java
+++ b/src/main/java/org/apache/maven/it/MavenLauncher.java
@@ -31,4 +31,6 @@
     int run( String[] cliArgs, String workingDirectory, File logFile )
         throws IOException, LauncherException;
 
+    String getMavenVersion()
+        throws IOException, LauncherException;
 }
diff --git a/src/main/java/org/apache/maven/it/Verifier.java b/src/main/java/org/apache/maven/it/Verifier.java
index c5374fb..bd2ec3d 100644
--- a/src/main/java/org/apache/maven/it/Verifier.java
+++ b/src/main/java/org/apache/maven/it/Verifier.java
@@ -39,12 +39,10 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 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 java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import javax.xml.parsers.ParserConfigurationException;
@@ -1403,69 +1401,18 @@
     public String getMavenVersion()
         throws VerificationException
     {
-        ForkedLauncher launcher = new ForkedLauncher( defaultMavenHome );
-
-        File logFile;
         try
         {
-            logFile = File.createTempFile( "maven", "log" );
-        }
-        catch ( IOException e )
-        {
-            throw new VerificationException( "Error creating temp file", e );
-        }
-
-        try
-        {
-            // disable EMMA runtime controller port allocation, should be harmless if EMMA is not used
-            Map<?,?> envVars = Collections.singletonMap( "MAVEN_OPTS", "-Demma.rt.control=false" );
-            launcher.run( new String[]{ "--version" }, envVars, null, logFile );
+            return getMavenLauncher( Collections.emptyMap() ).getMavenVersion();
         }
         catch ( LauncherException e )
         {
-            throw new VerificationException( "Error running commandline " + e.toString(), e );
+            throw new VerificationException( e );
         }
         catch ( IOException e )
         {
-            throw new VerificationException( "IO Error communicating with commandline " + e.toString(), e );
+            throw new VerificationException( e );
         }
-
-        List<String> logLines = loadFile( logFile, false );
-        //noinspection ResultOfMethodCallIgnored
-        logFile.delete();
-
-        String version = extractMavenVersion( logLines );
-
-        if ( version == null )
-        {
-            throw new VerificationException(
-                "Illegal maven output: String 'Maven version: ' not found in the following output:\n"
-                    + StringUtils.join( logLines.iterator(), "\n" ) );
-        }
-        else
-        {
-            return version;
-        }
-    }
-
-    static String extractMavenVersion( List<String> logLines )
-    {
-        String version = null;
-
-        final Pattern MAVEN_VERSION = Pattern.compile( "(?i).*Maven [^0-9]*([0-9]\\S*).*" );
-
-        for ( Iterator<String> it = logLines.iterator(); version == null && it.hasNext(); )
-        {
-            String line = it.next();
-
-            Matcher m = MAVEN_VERSION.matcher( line );
-            if ( m.matches() )
-            {
-                version = m.group( 1 );
-            }
-        }
-
-        return version;
     }
 
     private static String getLogContents( File logFile )
diff --git a/src/test/java/org/apache/maven/it/VerifierTest.java b/src/test/java/org/apache/maven/it/VerifierTest.java
index 187ab65..315e70b 100644
--- a/src/test/java/org/apache/maven/it/VerifierTest.java
+++ b/src/test/java/org/apache/maven/it/VerifierTest.java
@@ -30,11 +30,11 @@
     public void testExtractMavenVersion()
     {
         assertEquals( "2.0.6",
-                      Verifier.extractMavenVersion( Arrays.asList( new String[]{ "Maven version: 2.0.6" } ) ) );
-        assertEquals( "2.0.10", Verifier.extractMavenVersion( Arrays.asList(
+                      ForkedLauncher.extractMavenVersion( Arrays.asList( new String[]{ "Maven version: 2.0.6" } ) ) );
+        assertEquals( "2.0.10", ForkedLauncher.extractMavenVersion( Arrays.asList(
             new String[]{ "Maven version: 2.0.10", "Java version: 1.5.0_22",
                 "OS name: \"windows 7\" version: \"6.1\" arch: \"x86\" Family: \"windows\"" } ) ) );
-        assertEquals( "3.0", Verifier.extractMavenVersion( Arrays.asList(
+        assertEquals( "3.0", ForkedLauncher.extractMavenVersion( Arrays.asList(
             new String[]{ "Apache Maven 3.0 (r1004208; 2010-10-04 13:50:56+0200)", "Java version: 1.5.0_22",
                 "OS name: \"windows 7\" version: \"6.1\" arch: \"x86\" Family: \"windows\"" } ) ) );
     }