diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java index f150f2cdabb..e81ee2556af 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java @@ -49,13 +49,14 @@ import org.eclipse.jetty.start.log.RedirectedStreamLogger; * *

* The behaviour of Main is controlled by the parsing of the {@link Config} "org/eclipse/start/start.config" file - * obtained as a resource or file. This can be overridden with the START system property. + * obtained as a resource or file. *

*/ public class Main { private boolean _showUsage = false; private boolean _dumpVersions = false; + private boolean _listConfig = false; private boolean _listOptions = false; private boolean _dryRun = false; private boolean _exec = false; @@ -64,6 +65,7 @@ public class Main private final Config _config = new Config(); private Set _sysProps = new HashSet(); private List _jvmArgs = new ArrayList(); + private String _startConfig = null; private String _jettyHome; @@ -86,27 +88,31 @@ public class Main { List arguments = new ArrayList(); - // do we have any non option args - boolean has_args=false; - for (String arg : args) - has_args|=!arg.startsWith("-"); - - // if no non-option args, add the start.ini - if (!has_args) - arguments.addAll(loadStartIni()); // Add Arguments from start.ini (if it exists) - - // add the command line args + // add the command line args and look for start.ini args + boolean ini=false; for (String arg : args) { - if ("%start.ini".equals(arg)) + if (arg.startsWith("--ini=")) { - arguments.addAll(loadStartIni()); - continue; + ini=true; + if (arg.length()>6) + { + arguments.addAll(loadStartIni(arg.substring(6))); + continue; + } } - - arguments.add(arg); + else if (arg.startsWith("--config=")) + { + _startConfig=arg.substring(9); + } + else + arguments.add(arg); } + // if no non-option inis, add the start.ini + if (!ini) + arguments.addAll(0,loadStartIni(null)); + // The XML Configuration Files to initialize with List xmls = new ArrayList(); @@ -140,6 +146,12 @@ public class Main continue; } + if ("--list-config".equals(arg)) + { + _listConfig=true; + continue; + } + if ("--exec-print".equals(arg)||"--dry-run".equals(arg)) { _dryRun = true; @@ -235,12 +247,14 @@ public class Main /** * If a start.ini is present in the CWD, then load it into the argument list. */ - private List loadStartIni() + private List loadStartIni(String ini) { String jettyHome=System.getProperty("jetty.home"); - File startIniFile = (jettyHome!=null)? new File(jettyHome,"start.ini"):new File("start.ini"); + File startIniFile = ini==null?((jettyHome!=null)? new File(jettyHome,"start.ini"):new File("start.ini")):new File(ini); if (!startIniFile.exists() || !startIniFile.canRead()) { + if (ini!=null) + System.err.println("Warning - can't find ini file: "+ini); // No start.ini found, skip load. return Collections.emptyList(); } @@ -352,7 +366,7 @@ public class Main } else if (info.equals("@STARTINI")) { - List ini = loadStartIni(); + List ini = loadStartIni(null); if (ini!=null && ini.size()>0) { for (String a : ini) @@ -535,6 +549,12 @@ public class Main showAllOptionsWithVersions(classpath); return; } + + if (_listConfig) + { + listConfig(); + return; + } // Show Command Line to execute Jetty if (_dryRun) @@ -920,6 +940,34 @@ public class Main return ret; } + private void listConfig() + { + InputStream cfgstream = null; + try + { + cfgstream=getConfigStream(); + byte[] buf=new byte[4096]; + + int len=0; + + while (len>=0) + { + len=cfgstream.read(buf); + if (len>0) + System.out.write(buf,0,len); + } + } + catch (Exception e) + { + e.printStackTrace(); + System.exit(1); + } + finally + { + close(cfgstream); + } + } + /** * Load Configuration. * @@ -937,18 +985,9 @@ public class Main { // Pass in xmls.size into Config so that conditions based on "nargs" work. _config.setArgCount(xmls.size()); - - // What start.config should we use? - String cfgName = System.getProperty("START","org/eclipse/jetty/start/start.config"); - Config.debug("config=" + cfgName); - - // Look up config as resource first. - cfgstream = getClass().getClassLoader().getResourceAsStream(cfgName); - - // resource not found, try filesystem next - if (cfgstream == null) - cfgstream = new FileInputStream(cfgName); - + + cfgstream=getConfigStream(); + // parse the config _config.parse(cfgstream); @@ -985,6 +1024,24 @@ public class Main } } + private InputStream getConfigStream() throws FileNotFoundException + { + String config=_startConfig; + if (config==null || config.length()==0) + config=System.getProperty("START","org/eclipse/jetty/start/start.config"); + + Config.debug("config=" + config); + + // Look up config as resource first. + InputStream cfgstream = getClass().getClassLoader().getResourceAsStream(config); + + // resource not found, try filesystem next + if (cfgstream == null) + cfgstream = new FileInputStream(config); + + return cfgstream; + } + private void startMonitor() { int port = Integer.parseInt(System.getProperty("STOP.PORT","-1")); diff --git a/jetty-start/src/main/resources/org/eclipse/jetty/start/usage.txt b/jetty-start/src/main/resources/org/eclipse/jetty/start/usage.txt index 7383c0112a4..ba59db2335c 100644 --- a/jetty-start/src/main/resources/org/eclipse/jetty/start/usage.txt +++ b/jetty-start/src/main/resources/org/eclipse/jetty/start/usage.txt @@ -12,6 +12,8 @@ Command Line Options: dependent jars, then exit. --list-options List the details of each classpath OPTION + + --list-config List the start.config file. --dry-run Print the command line that the start.jar generates, then exit. This may be used to generate command lines @@ -21,7 +23,6 @@ Command Line Options: a sub processes. This can be used when start.ini contains -X or -D arguments, but creates an extra JVM instance. - --secure Enable Security: * JVM Security Manager @@ -30,7 +31,17 @@ Command Line Options: * Audit Logging --stop Stop the running Jetty instance. - + + --config= Specify an alternate start.config file. + The default is the start.config file inside + the start.jar. The default can also be specified + with the START system property. + + --ini= Load command line arguments from a file. If + no --ini options are specified, then the + start.ini file will be read if it exists. + A --ini option with no file indicates that + start.ini should not be read. System Properties: These are set with a command line like "java -Dname=value ..." and are @@ -101,9 +112,8 @@ Available Configurations: Defaults: A start.ini file may be used to specify default arguments to start.jar, which are used if no command line arguments are provided and override - the defaults in the start.config file. If arguments are provided on the - command line, the special "%start.ini" argument may be used to include - the start.ini arguments and merge any OPTIONS. The current start.ini + the defaults in the start.config file. If --ini options are provided on + the command line, then start.ini will no be read. The current start.ini arguments are: @STARTINI@