org.apache.tomcat.maven.runner.Tomcat8RunnerCli.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.tomcat.maven.runner.Tomcat8RunnerCli.java

Source

package org.apache.tomcat.maven.runner;
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Properties;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

/**
 * @author Olivier Lamy
 * @since 2.0
 */
@SuppressWarnings("static-access")
public class Tomcat8RunnerCli {

    public static final String STAND_ALONE_PROPERTIES_FILENAME = "tomcat.standalone.properties";

    static Option httpPort = OptionBuilder.withArgName("httpPort").hasArg().withDescription("http port to use")
            .create("httpPort");

    static Option httpsPort = OptionBuilder.withArgName("httpsPort").hasArg().withDescription("https port to use")
            .create("httpsPort");

    static Option maxPostSize = OptionBuilder.withArgName("maxPostSize").hasArg()
            .withDescription("max post size to use").create("maxPostSize");

    static Option ajpPort = OptionBuilder.withArgName("ajpPort").hasArg().withDescription("ajp port to use")
            .create("ajpPort");

    static Option serverXmlPath = OptionBuilder.withArgName("serverXmlPath").hasArg()
            .withDescription("server.xml to use, optional").create("serverXmlPath");

    static Option resetExtract = OptionBuilder.withArgName("resetExtract")
            .withDescription("clean previous extract directory").create("resetExtract");

    static Option help = OptionBuilder.withLongOpt("help").withDescription("help").create('h');

    static Option debug = OptionBuilder.withLongOpt("debug").withDescription("debug").create('X');

    static Option sysProps = OptionBuilder.withDescription("use value for given property").hasArgs()
            .withDescription("key=value").withValueSeparator().create('D');

    static Option clientAuth = OptionBuilder.withArgName("clientAuth")
            .withDescription("enable client authentication for https").create("clientAuth");

    static Option keyAlias = OptionBuilder.withArgName("keyAlias").hasArgs()
            .withDescription("alias from keystore for ssl").create("keyAlias");

    static Option obfuscate = OptionBuilder.withArgName("password").hasArgs()
            .withDescription("obfuscate the password and exit").create("obfuscate");

    static Option httpProtocol = OptionBuilder.withArgName("httpProtocol").hasArg()
            .withDescription("http protocol to use: HTTP/1.1 or org.apache.coyote.http11.Http11NioProtocol")
            .create("httpProtocol");

    static Option extractDirectory = OptionBuilder.withArgName("extractDirectory").hasArg()
            .withDescription("path to extract war content, default value: .extract").create("extractDirectory");

    static Option loggerName = OptionBuilder.withArgName("loggerName").hasArg()
            .withDescription("logger to use: slf4j to use slf4j bridge on top of jul").create("loggerName");

    static Option uriEncoding = OptionBuilder.withArgName("uriEncoding").hasArg()
            .withDescription("connector uriEncoding default ISO-8859-1").create("uriEncoding");

    static Options options = new Options();

    static {
        options.addOption(httpPort) //
                .addOption(httpsPort) //
                .addOption(ajpPort) //
                .addOption(serverXmlPath) //
                .addOption(resetExtract) //
                .addOption(help) //
                .addOption(debug) //
                .addOption(sysProps) //
                .addOption(httpProtocol) //
                .addOption(clientAuth) //
                .addOption(keyAlias) //
                .addOption(obfuscate) //
                .addOption(extractDirectory) //
                .addOption(loggerName) //
                .addOption(uriEncoding) //
                .addOption(maxPostSize);
    }

    public static void main(String[] args) throws Exception {
        CommandLineParser parser = new GnuParser();
        CommandLine line = null;
        try {
            line = parser.parse(Tomcat8RunnerCli.options, args);
        } catch (ParseException e) {
            System.err.println("Parsing failed.  Reason: " + e.getMessage());
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp(getCmdLineSyntax(), Tomcat8RunnerCli.options);
            System.exit(1);
        }

        if (line.hasOption(help.getOpt())) {
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp(getCmdLineSyntax(), Tomcat8RunnerCli.options);
            System.exit(0);
        }

        if (line.hasOption(obfuscate.getOpt())) {
            System.out.println(PasswordUtil.obfuscate(line.getOptionValue(obfuscate.getOpt())));
            System.exit(0);
        }
        Tomcat8Runner tomcat8Runner = new Tomcat8Runner();

        tomcat8Runner.runtimeProperties = buildStandaloneProperties();

        if (line.hasOption(serverXmlPath.getOpt())) {
            tomcat8Runner.serverXmlPath = line.getOptionValue(serverXmlPath.getOpt());
        }

        String port = tomcat8Runner.runtimeProperties.getProperty(Tomcat8Runner.HTTP_PORT_KEY);
        if (port != null) {
            tomcat8Runner.httpPort = Integer.parseInt(port);
        }

        // cli win for the port
        if (line.hasOption(httpPort.getOpt())) {
            tomcat8Runner.httpPort = Integer.parseInt(line.getOptionValue(httpPort.getOpt()));
        }

        if (line.hasOption(maxPostSize.getOpt())) {
            tomcat8Runner.maxPostSize = Integer.parseInt(line.getOptionValue(maxPostSize.getOpt()));
        }

        if (line.hasOption(httpsPort.getOpt())) {
            tomcat8Runner.httpsPort = Integer.parseInt(line.getOptionValue(httpsPort.getOpt()));
        }
        if (line.hasOption(ajpPort.getOpt())) {
            tomcat8Runner.ajpPort = Integer.parseInt(line.getOptionValue(ajpPort.getOpt()));
        }
        if (line.hasOption(resetExtract.getOpt())) {
            tomcat8Runner.resetExtract = true;
        }
        if (line.hasOption(debug.getOpt())) {
            tomcat8Runner.debug = true;
        }

        if (line.hasOption(httpProtocol.getOpt())) {
            tomcat8Runner.httpProtocol = line.getOptionValue(httpProtocol.getOpt());
        }

        if (line.hasOption(sysProps.getOpt())) {
            Properties systemProperties = line.getOptionProperties(sysProps.getOpt());
            if (systemProperties != null && !systemProperties.isEmpty()) {
                for (Map.Entry<Object, Object> sysProp : systemProperties.entrySet()) {
                    System.setProperty((String) sysProp.getKey(), (String) sysProp.getValue());
                }
            }
        }
        if (line.hasOption(clientAuth.getOpt())) {
            tomcat8Runner.clientAuth = clientAuth.getOpt();
        }
        if (line.hasOption(keyAlias.getOpt())) {
            tomcat8Runner.keyAlias = line.getOptionValue(keyAlias.getOpt());
        }

        if (line.hasOption(extractDirectory.getOpt())) {
            tomcat8Runner.extractDirectory = line.getOptionValue(extractDirectory.getOpt());
        }

        if (line.hasOption(loggerName.getOpt())) {
            tomcat8Runner.loggerName = line.getOptionValue(loggerName.getOpt());
        }

        if (line.hasOption(uriEncoding.getOpt())) {
            tomcat8Runner.uriEncoding = line.getOptionValue(uriEncoding.getOpt());
        }

        // here we go
        tomcat8Runner.run();
    }

    private static Properties buildStandaloneProperties() throws IOException {
        InputStream is = Thread.currentThread().getContextClassLoader()
                .getResourceAsStream(STAND_ALONE_PROPERTIES_FILENAME);
        Properties properties = new Properties();
        properties.load(is);
        return properties;
    }

    public static String getCmdLineSyntax() {
        return "java -jar [path to your exec war jar]";
    }
}