Example usage for org.apache.maven.cli MavenCli MavenCli

List of usage examples for org.apache.maven.cli MavenCli MavenCli

Introduction

In this page you can find the example usage for org.apache.maven.cli MavenCli MavenCli.

Prototype

public MavenCli(ClassWorld classWorld) 

Source Link

Usage

From source file:org.eclipse.che.maven.server.MavenServerImpl.java

License:Open Source License

public MavenServerImpl(MavenSettings settings) throws RemoteException {
    BasicConfigurator.configure();//from  w ww .  j  av  a 2  s  .  c  om
    Logger.getRootLogger().setLevel(getLog4jLogLevel(settings.getLoggingLevel()));
    File mavenHome = settings.getMavenHome();
    if (mavenHome != null) {
        System.setProperty("maven.home", mavenHome.getPath());
    }

    terminalLogger = new MavenServerTerminalLogger();
    terminalLogger.setThreshold(settings.getLoggingLevel());
    ClassWorld classWorld = new ClassWorld("plexus.core", Thread.currentThread().getContextClassLoader());
    MavenCli cli = new MavenCli(classWorld) {
        @Override
        protected void customizeContainer(PlexusContainer container) {
            ((DefaultPlexusContainer) container).setLoggerManager(new BaseLoggerManager() {
                @Override
                protected org.codehaus.plexus.logging.Logger createLogger(String s) {
                    return terminalLogger;
                }
            });
        }
    };

    //maven 3.2.2 has org.apache.maven.cli.MavenCli$CliRequest class
    //but maven 3.3.3 has org.apache.maven.cli.CliRequest so try to support both classes
    Class<?> cliRequestClass;
    SettingsBuilder settingsBuilder = null;
    try {
        cliRequestClass = MavenCli.class.getClassLoader().loadClass("org.apache.maven.cli.CliRequest");
        System.setProperty("maven.multiModuleProjectDirectory", new File("").getPath());
        settingsBuilder = new DefaultSettingsBuilderFactory().newInstance();
    } catch (ClassNotFoundException e) {
        try {
            cliRequestClass = MavenCli.class.getClassLoader()
                    .loadClass("org.apache.maven.cli.MavenCli$CliRequest");
        } catch (ClassNotFoundException cnfe) {
            throw new RuntimeException(cnfe);
        }
    }

    Object request;
    List<String> commandLine = new ArrayList<>(settings.getUserProperties().size());
    commandLine.addAll(settings.getUserProperties().entrySet().stream()
            .map(entry -> "-D" + entry.getKey() + "=" + entry.getValue()).collect(Collectors.toList()));

    if (settings.getLoggingLevel() == MavenTerminal.LEVEL_DEBUG) {
        commandLine.add("-X");
        commandLine.add("-e");
    }
    if (settings.getLoggingLevel() == MavenTerminal.LEVEL_DISABLED) {
        commandLine.add("-q");
    }
    if (commandLine.contains("-U") || commandLine.contains("--update-snapshots")) {
        updateSnapshots = true;
    }

    try {
        Constructor constructor = cliRequestClass.getDeclaredConstructor(String[].class, ClassWorld.class);
        constructor.setAccessible(true);
        request = constructor.newInstance(commandLine.toArray(new String[commandLine.size()]), classWorld);

        for (String method : CLI_METHODS) {
            Method m = MavenCli.class.getDeclaredMethod(method, cliRequestClass);
            m.setAccessible(true);
            m.invoke(cli, request);
        }

        Method containerMethod = MavenCli.class.getDeclaredMethod("container", cliRequestClass);
        containerMethod.setAccessible(true);
        container = (DefaultPlexusContainer) containerMethod.invoke(cli, request);
        container.getLoggerManager().setThreshold(settings.getLoggingLevel());
        Field systemProperties = cliRequestClass.getDeclaredField("systemProperties");
        systemProperties.setAccessible(true);

        properties = (Properties) systemProperties.get(request);
        Field userPropertiesField = cliRequestClass.getDeclaredField("userProperties");
        userPropertiesField.setAccessible(true);
        Properties userProperties = (Properties) userPropertiesField.get(request);
        this.settings = getSettings(settingsBuilder, settings, properties, userProperties);
    } catch (NoSuchMethodException | NoSuchFieldException | IllegalAccessException | InvocationTargetException
            | InstantiationException e) {
        throw new RuntimeException(e);
    }

    try {
        localRepository = new File(this.settings.getLocalRepository());
        localRepo = getMavenComponent(RepositorySystem.class).createLocalRepository(localRepository);
    } catch (InvalidRepositoryException e) {
        throw new RuntimeException(e);
    }
}

From source file:org.jetbrains.idea.maven.server.Maven30ServerEmbedderImpl.java

License:Apache License

public Maven30ServerEmbedderImpl(MavenServerSettings settings) throws RemoteException {
    super(settings);

    File mavenHome = settings.getMavenHome();
    if (mavenHome != null) {
        System.setProperty("maven.home", mavenHome.getPath());
    }//  w  ww.  j  a v  a2s  .  c  o m

    myConsoleWrapper = new Maven3ServerConsoleLogger();
    myConsoleWrapper.setThreshold(settings.getLoggingLevel());

    ClassWorld classWorld = new ClassWorld("plexus.core", Thread.currentThread().getContextClassLoader());
    MavenCli cli = new MavenCli(classWorld) {
        @Override
        protected void customizeContainer(PlexusContainer container) {
            ((DefaultPlexusContainer) container).setLoggerManager(new BaseLoggerManager() {
                @Override
                protected Logger createLogger(String s) {
                    return myConsoleWrapper;
                }
            });
        }
    };

    Class cliRequestClass;
    try {
        cliRequestClass = MavenCli.class.getClassLoader().loadClass("org.apache.maven.cli.MavenCli$CliRequest");
    } catch (ClassNotFoundException e) {
        throw new RuntimeException("Class \"org.apache.maven.cli.MavenCli$CliRequest\" not found");
    }

    Object cliRequest;
    try {
        List<String> commandLineOptions = new ArrayList<String>(settings.getUserProperties().size());
        for (Map.Entry<Object, Object> each : settings.getUserProperties().entrySet()) {
            commandLineOptions.add("-D" + each.getKey() + "=" + each.getValue());
        }

        if (settings.getLoggingLevel() == MavenServerConsole.LEVEL_DEBUG) {
            commandLineOptions.add("-X");
            commandLineOptions.add("-e");
        } else if (settings.getLoggingLevel() == MavenServerConsole.LEVEL_DISABLED) {
            commandLineOptions.add("-q");
        }

        String mavenEmbedderCliOptions = System
                .getProperty(MavenServerEmbedder.MAVEN_EMBEDDER_CLI_ADDITIONAL_ARGS);
        if (mavenEmbedderCliOptions != null) {
            commandLineOptions.addAll(MavenStringUtil.splitHonorQuotes(mavenEmbedderCliOptions, ' '));
        }
        if (commandLineOptions.contains("-U") || commandLineOptions.contains("--update-snapshots")) {
            myAlwaysUpdateSnapshots = true;
        }

        //noinspection unchecked
        Constructor constructor = cliRequestClass.getDeclaredConstructor(String[].class, ClassWorld.class);
        constructor.setAccessible(true);
        //noinspection SSBasedInspection
        cliRequest = constructor.newInstance(commandLineOptions.toArray(new String[commandLineOptions.size()]),
                classWorld);

        for (String each : new String[] { "initialize", "cli", "logging", "properties", "container" }) {
            Method m = MavenCli.class.getDeclaredMethod(each, cliRequestClass);
            m.setAccessible(true);
            m.invoke(cli, cliRequest);
        }
    } catch (InstantiationException e) {
        throw new RuntimeException(e);
    } catch (NoSuchMethodException e) {
        throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
    } catch (InvocationTargetException e) {
        throw new RuntimeException(e);
    }

    // reset threshold
    myContainer = FieldAccessor.get(MavenCli.class, cli, "container");
    myContainer.getLoggerManager().setThreshold(settings.getLoggingLevel());

    mySystemProperties = FieldAccessor.get(cliRequestClass, cliRequest, "systemProperties");

    if (settings.getProjectJdk() != null) {
        mySystemProperties.setProperty("java.home", settings.getProjectJdk());
    }

    myMavenSettings = buildSettings(FieldAccessor.<SettingsBuilder>get(MavenCli.class, cli, "settingsBuilder"),
            settings, mySystemProperties,
            FieldAccessor.<Properties>get(cliRequestClass, cliRequest, "userProperties"));

    myLocalRepository = createLocalRepository();
}

From source file:org.jetbrains.idea.maven.server.Maven32ServerEmbedderImpl.java

License:Apache License

public Maven32ServerEmbedderImpl(MavenServerSettings settings) throws RemoteException {
    super(settings);

    File mavenHome = settings.getMavenHome();
    if (mavenHome != null) {
        System.setProperty("maven.home", mavenHome.getPath());
    }//from   w w w.jav  a 2  s. c  om

    myConsoleWrapper = new Maven3ServerConsoleLogger();
    myConsoleWrapper.setThreshold(settings.getLoggingLevel());

    ClassWorld classWorld = new ClassWorld("plexus.core", Thread.currentThread().getContextClassLoader());
    MavenCli cli = new MavenCli(classWorld) {
        @Override
        protected void customizeContainer(PlexusContainer container) {
            ((DefaultPlexusContainer) container).setLoggerManager(new BaseLoggerManager() {
                @Override
                protected Logger createLogger(String s) {
                    return myConsoleWrapper;
                }
            });
        }
    };

    SettingsBuilder settingsBuilder = null;
    Class cliRequestClass;
    try {
        cliRequestClass = MavenCli.class.getClassLoader().loadClass("org.apache.maven.cli.MavenCli$CliRequest");
    } catch (ClassNotFoundException e) {
        try {
            cliRequestClass = MavenCli.class.getClassLoader().loadClass("org.apache.maven.cli.CliRequest");
            // initialize maven.multiModuleProjectDirectory property to avoid failure in org.apache.maven.cli.MavenCli#initialize method
            System.setProperty("maven.multiModuleProjectDirectory", new File("").getPath());
            settingsBuilder = new DefaultSettingsBuilderFactory().newInstance();
        } catch (ClassNotFoundException e1) {
            throw new RuntimeException("unable to find maven CliRequest class");
        }
    }

    Object cliRequest;
    try {
        List<String> commandLineOptions = new ArrayList<String>(settings.getUserProperties().size());
        for (Map.Entry<Object, Object> each : settings.getUserProperties().entrySet()) {
            commandLineOptions.add("-D" + each.getKey() + "=" + each.getValue());
        }

        if (settings.getLoggingLevel() == MavenServerConsole.LEVEL_DEBUG) {
            commandLineOptions.add("-X");
            commandLineOptions.add("-e");
        } else if (settings.getLoggingLevel() == MavenServerConsole.LEVEL_DISABLED) {
            commandLineOptions.add("-q");
        }

        String mavenEmbedderCliOptions = System
                .getProperty(MavenServerEmbedder.MAVEN_EMBEDDER_CLI_ADDITIONAL_ARGS);
        if (mavenEmbedderCliOptions != null) {
            commandLineOptions.addAll(MavenStringUtil.splitHonorQuotes(mavenEmbedderCliOptions, ' '));
        }
        if (commandLineOptions.contains("-U") || commandLineOptions.contains("--update-snapshots")) {
            myAlwaysUpdateSnapshots = true;
        }

        //noinspection unchecked
        Constructor constructor = cliRequestClass.getDeclaredConstructor(String[].class, ClassWorld.class);
        constructor.setAccessible(true);
        //noinspection SSBasedInspection
        cliRequest = constructor.newInstance(commandLineOptions.toArray(new String[commandLineOptions.size()]),
                classWorld);

        for (String each : new String[] { "initialize", "cli", "logging", "properties", "container" }) {
            Method m = MavenCli.class.getDeclaredMethod(each, cliRequestClass);
            m.setAccessible(true);
            m.invoke(cli, cliRequest);
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

    // reset threshold
    try {
        Method m = MavenCli.class.getDeclaredMethod("container", cliRequestClass);
        m.setAccessible(true);
        myContainer = (DefaultPlexusContainer) m.invoke(cli, cliRequest);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

    myContainer.getLoggerManager().setThreshold(settings.getLoggingLevel());

    mySystemProperties = FieldAccessor.get(cliRequestClass, cliRequest, "systemProperties");

    if (settings.getProjectJdk() != null) {
        mySystemProperties.setProperty("java.home", settings.getProjectJdk());
    }

    if (settingsBuilder == null) {
        settingsBuilder = FieldAccessor.get(MavenCli.class, cli, "settingsBuilder");
    }

    myMavenSettings = buildSettings(settingsBuilder, settings, mySystemProperties,
            FieldAccessor.<Properties>get(cliRequestClass, cliRequest, "userProperties"));

    myLocalRepository = createLocalRepository();
}

From source file:org.mule.module.maven.MavenConnector.java

License:Open Source License

@PostConstruct
public void init() {
    this.classWorld = new ClassWorld("plexus.core", Thread.currentThread().getContextClassLoader());
    this.mavenCli = new MavenCli(classWorld);
}