Merge branch '1.5.2-SNAPSHOT' into 1.6.0-SNAPSHOT Conflicts: start/src/main/java/org/apache/accumulo/start/Main.java
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/a5a05523 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/a5a05523 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/a5a05523 Branch: refs/heads/1.6.0-SNAPSHOT Commit: a5a055233e5762d110a9b0b79bd87e5c6717507e Parents: a64151e 1140d00 Author: Sean Busbey <bus...@cloudera.com> Authored: Wed Mar 26 23:41:56 2014 -0500 Committer: Sean Busbey <bus...@cloudera.com> Committed: Wed Mar 26 23:41:56 2014 -0500 ---------------------------------------------------------------------- start/src/main/java/org/apache/accumulo/start/Main.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/a5a05523/start/src/main/java/org/apache/accumulo/start/Main.java ---------------------------------------------------------------------- diff --cc start/src/main/java/org/apache/accumulo/start/Main.java index 8eadb9d,5976923..3c7da95 --- a/start/src/main/java/org/apache/accumulo/start/Main.java +++ b/start/src/main/java/org/apache/accumulo/start/Main.java @@@ -35,21 -32,26 +35,24 @@@ public class Main printUsage(); System.exit(1); } - final String argsToPass[] = new String[args.length - 1]; - System.arraycopy(args, 1, argsToPass, 0, args.length - 1); - + Thread.currentThread().setContextClassLoader(AccumuloClassLoader.getClassLoader()); - + Class<?> vfsClassLoader = AccumuloClassLoader.getClassLoader().loadClass("org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader"); - + ClassLoader cl = (ClassLoader) vfsClassLoader.getMethod("getClassLoader", new Class[] {}).invoke(null, new Object[] {}); - + Class<?> runTMP = null; - + Thread.currentThread().setContextClassLoader(cl); - - if (args[0].equals("master")) { - runTMP = cl.loadClass("org.apache.accumulo.master.Master"); + + if (args[0].equals("help")){ + printUsage(); + System.exit(0); + } else if (args[0].equals("master")) { - runTMP = cl.loadClass("org.apache.accumulo.server.master.Master"); ++ runTMP = cl.loadClass("org.apache.accumulo.master.Master"); } else if (args[0].equals("tserver")) { - runTMP = cl.loadClass("org.apache.accumulo.server.tabletserver.TabletServer"); + runTMP = cl.loadClass("org.apache.accumulo.tserver.TabletServer"); } else if (args[0].equals("shell")) { runTMP = cl.loadClass("org.apache.accumulo.core.util.shell.Shell"); } else if (args[0].equals("init")) { @@@ -172,28 -141,6 +175,28 @@@ } private static void printUsage() { - System.out.println("accumulo init | master | tserver | monitor | shell | admin | gc | classpath | rfile-info | login-info | tracer | proxy | zookeeper | info | version | help | <accumulo class> args"); + System.out - .println("accumulo init | master | tserver | monitor | shell | admin | gc | classpath | rfile-info | login-info | tracer | minicluster | proxy | zookeeper | create-token | info | version | jar <jar> [<main class>] args | <accumulo class> args"); ++ .println("accumulo init | master | tserver | monitor | shell | admin | gc | classpath | rfile-info | login-info | tracer | minicluster | proxy | zookeeper | create-token | info | version | help | jar <jar> [<main class>] args | <accumulo class> args"); + } + + // feature: will work even if main class isn't in the JAR + static Class<?> loadClassFromJar(String[] args, JarFile f, ClassLoader cl) throws IOException, ClassNotFoundException { + ClassNotFoundException explicitNotFound = null; + if (args.length >= 3) { + try { + return cl.loadClass(args[2]); // jar jar-file main-class + } catch (ClassNotFoundException cnfe) { + // assume this is the first argument, look for main class in JAR manifest + explicitNotFound = cnfe; + } + } + String mainClass = f.getManifest().getMainAttributes().getValue(Attributes.Name.MAIN_CLASS); + if (mainClass == null) { + if (explicitNotFound != null) { + throw explicitNotFound; + } + throw new ClassNotFoundException("No main class was specified, and the JAR manifest does not specify one"); + } + return cl.loadClass(mainClass); } }