View Javadoc
1   package org.apache.maven.wrapper;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.File;
23  import java.lang.reflect.Method;
24  import java.net.URL;
25  import java.net.URLClassLoader;
26  
27  /**
28   * Maven starter, from a provided Maven home directory.
29   *
30   * @author Hans Dockter
31   */
32  public class BootstrapMainStarter
33  {
34      public void start( String[] args, File mavenHome )
35          throws Exception
36      {
37          File mavenJar = findLauncherJar( mavenHome );
38          URLClassLoader contextClassLoader = new URLClassLoader( new URL[] { mavenJar.toURI().toURL() },
39                                                                  ClassLoader.getSystemClassLoader().getParent() );
40          Thread.currentThread().setContextClassLoader( contextClassLoader );
41          Class<?> mainClass = contextClassLoader.loadClass( "org.codehaus.plexus.classworlds.launcher.Launcher" );
42  
43          System.setProperty( "maven.home", mavenHome.getAbsolutePath() );
44          System.setProperty( "classworlds.conf", new File( mavenHome, "/bin/m2.conf" ).getAbsolutePath() );
45  
46          Method mainMethod = mainClass.getMethod( "main", String[].class );
47          mainMethod.invoke( null, new Object[] { args } );
48      }
49  
50      private File findLauncherJar( File mavenHome )
51      {
52          for ( File file : new File( mavenHome, "boot" ).listFiles() )
53          {
54              if ( file.getName().matches( "plexus-classworlds-.*\\.jar" ) )
55              {
56                  return file;
57              }
58          }
59          throw new RuntimeException( String.format( "Could not locate the Maven launcher JAR"
60              + " in Maven distribution '%s'.", mavenHome ) );
61      }
62  }