public static Embedded3xLauncher createFromMavenHome()

in src/main/java/org/apache/maven/shared/verifier/Embedded3xLauncher.java [58:104]


    public static Embedded3xLauncher createFromMavenHome(String mavenHome, String classworldConf, List<URL> classpath)
            throws LauncherException {
        if (mavenHome == null || mavenHome.length() <= 0) {
            throw new LauncherException("Invalid Maven home directory " + mavenHome);
        }

        System.setProperty("maven.home", mavenHome);

        File config;
        if (classworldConf != null) {
            config = new File(classworldConf);
        } else {
            config = new File(mavenHome, "bin/m2.conf");
        }

        ClassLoader bootLoader = getBootLoader(mavenHome, classpath);

        ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
        Thread.currentThread().setContextClassLoader(bootLoader);
        try {
            Class<?> launcherClass = bootLoader.loadClass("org.codehaus.plexus.classworlds.launcher.Launcher");

            Object launcher = launcherClass.newInstance();

            Method configure = launcherClass.getMethod("configure", new Class[] {InputStream.class});

            configure.invoke(launcher, new Object[] {new FileInputStream(config)});

            Method getWorld = launcherClass.getMethod("getWorld");
            Object classWorld = getWorld.invoke(launcher);

            Method getMainClass = launcherClass.getMethod("getMainClass");
            Class<?> cliClass = (Class<?>) getMainClass.invoke(launcher);

            Constructor<?> newMavenCli = cliClass.getConstructor(new Class[] {classWorld.getClass()});
            Object mavenCli = newMavenCli.newInstance(new Object[] {classWorld});

            Class<?>[] parameterTypes = {String[].class, String.class, PrintStream.class, PrintStream.class};
            Method doMain = cliClass.getMethod("doMain", parameterTypes);

            return new Embedded3xLauncher(mavenCli, doMain);
        } catch (ReflectiveOperationException | IOException e) {
            throw new LauncherException("Failed to initialize Laucher", e);
        } finally {
            Thread.currentThread().setContextClassLoader(oldClassLoader);
        }
    }