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\"" } ) ) );
}