Author: ifedorenko Date: Sun Nov 24 05:23:35 2013 New Revision: 1544919 URL: http://svn.apache.org/r1544919 Log: Introduced hooks to support IDE workspace dependency resolution
New -Dmaven.bootclasspath and -Dclassworlds.conf allow an IDE like m2e control contents of Maven runtime used by verifier embedded mode and use classes from IDE workspace instead of deployed or installed artifacts. Signed-off-by: Igor Fedorenko <i...@ifedorenko.com> Modified: maven/shared/trunk/maven-verifier/src/main/java/org/apache/maven/it/Embedded3xLauncher.java maven/shared/trunk/maven-verifier/src/main/java/org/apache/maven/it/Verifier.java Modified: maven/shared/trunk/maven-verifier/src/main/java/org/apache/maven/it/Embedded3xLauncher.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-verifier/src/main/java/org/apache/maven/it/Embedded3xLauncher.java?rev=1544919&r1=1544918&r2=1544919&view=diff ============================================================================== --- maven/shared/trunk/maven-verifier/src/main/java/org/apache/maven/it/Embedded3xLauncher.java (original) +++ maven/shared/trunk/maven-verifier/src/main/java/org/apache/maven/it/Embedded3xLauncher.java Sun Nov 24 05:23:35 2013 @@ -59,7 +59,7 @@ class Embedded3xLauncher /** * Launches an embedded Maven 3.x instance from some Maven installation directory. */ - public static Embedded3xLauncher createFromMavenHome( String mavenHome ) + public static Embedded3xLauncher createFromMavenHome( String mavenHome, String classworldConf, List<URL> classpath ) throws LauncherException { if ( mavenHome == null || mavenHome.length() <= 0 ) @@ -69,9 +69,17 @@ class Embedded3xLauncher System.setProperty( "maven.home", mavenHome ); - File config = new File( mavenHome, "bin/m2.conf" ); + File config; + if ( classworldConf != null ) + { + config = new File( classworldConf ); + } + else + { + config = new File( mavenHome, "bin/m2.conf" ); + } - ClassLoader bootLoader = getBootLoader( mavenHome ); + ClassLoader bootLoader = getBootLoader( mavenHome, classpath ); ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader( bootLoader ); @@ -167,13 +175,17 @@ class Embedded3xLauncher } } - private static ClassLoader getBootLoader( String mavenHome ) + private static ClassLoader getBootLoader( String mavenHome, List<URL> classpath ) { - File bootDir = new File( mavenHome, "boot" ); + List<URL> urls = classpath; - List<URL> urls = new ArrayList<URL>(); + if ( urls == null ) + { + urls = new ArrayList<URL>(); - addUrls( urls, bootDir ); + File bootDir = new File( mavenHome, "boot" ); + addUrls( urls, bootDir ); + } if ( urls.isEmpty() ) { Modified: maven/shared/trunk/maven-verifier/src/main/java/org/apache/maven/it/Verifier.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-verifier/src/main/java/org/apache/maven/it/Verifier.java?rev=1544919&r1=1544918&r2=1544919&view=diff ============================================================================== --- maven/shared/trunk/maven-verifier/src/main/java/org/apache/maven/it/Verifier.java (original) +++ maven/shared/trunk/maven-verifier/src/main/java/org/apache/maven/it/Verifier.java Sun Nov 24 05:23:35 2013 @@ -106,6 +106,10 @@ public class Verifier private String defaultMavenHome; + private String defaultClassworldConf; + + private String defaultClasspath; + // will launch mvn with --debug private boolean mavenDebug = false; @@ -174,6 +178,8 @@ public class Verifier private void findDefaultMavenHome() throws VerificationException { + defaultClasspath = System.getProperty("maven.bootclasspath"); + defaultClassworldConf = System.getProperty("classworlds.conf"); defaultMavenHome = System.getProperty( "maven.home" ); if ( defaultMavenHome == null ) @@ -1397,9 +1403,33 @@ public class Verifier } else { - embeddedLauncher = Embedded3xLauncher.createFromMavenHome( defaultMavenHome ); + embeddedLauncher = + Embedded3xLauncher.createFromMavenHome( defaultMavenHome, defaultClassworldConf, getClasspath() ); + } + } + } + + private List<URL> getClasspath() + throws LauncherException + { + if ( defaultClasspath == null ) + { + return null; + } + ArrayList<URL> classpath = new ArrayList<URL>(); + StringTokenizer st = new StringTokenizer( defaultClasspath, File.pathSeparator ); + while ( st.hasMoreTokens() ) + { + try + { + classpath.add( new File( st.nextToken() ).toURI().toURL() ); + } + catch ( MalformedURLException e ) + { + throw new LauncherException( "Invalid launcher classpath " + defaultClasspath, e ); } } + return classpath; } public String getMavenVersion()