From 0bbdd9f9adf12ad9082a4c49ae1c9a0778b00bb4 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 28 Nov 2012 17:39:12 -0500 Subject: [PATCH] Fixed focus for keystore password prompt --- src/com/gitblit/Launcher.java | 77 ++++++++++++++++++++++++-------------- 1 files changed, 48 insertions(+), 29 deletions(-) diff --git a/src/com/gitblit/Launcher.java b/src/com/gitblit/Launcher.java index 6059e2b..a43331b 100644 --- a/src/com/gitblit/Launcher.java +++ b/src/com/gitblit/Launcher.java @@ -22,56 +22,76 @@ import java.net.URL; import java.net.URLClassLoader; import java.security.ProtectionDomain; +import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; +import com.gitblit.build.Build; + /** - * Launch helper class that adds all jars found in the local "lib" folder and - * then calls the application main. Using this technique we do not have to - * specify a classpath and we can dynamically add jars to the distribution. + * Launch helper class that adds all jars found in the local "lib" & "ext" + * folders and then calls the application main. Using this technique we do not + * have to specify a classpath and we can dynamically add jars to the + * distribution. + * + * This class also downloads all runtime dependencies, if they are not found. + * + * @author James Moger * */ public class Launcher { - public final static boolean debug = false; + public static final boolean DEBUG = false; + + /** + * Parameters of the method to add an URL to the System classes. + */ + private static final Class<?>[] PARAMETERS = new Class[] { URL.class }; public static void main(String[] args) { - if (debug) + if (DEBUG) { System.out.println("jcp=" + System.getProperty("java.class.path")); + ProtectionDomain protectionDomain = Launcher.class.getProtectionDomain(); + System.out.println("launcher=" + + protectionDomain.getCodeSource().getLocation().toExternalForm()); + } - ProtectionDomain protectionDomain = Launcher.class.getProtectionDomain(); - final String launchJar = protectionDomain.getCodeSource().getLocation().toExternalForm(); - if (debug) - System.out.println("launcher=" + launchJar); - + // download all runtime dependencies Build.runtime(); // Load the JARs in the lib and ext folder String[] folders = new String[] { "lib", "ext" }; List<File> jars = new ArrayList<File>(); for (String folder : folders) { - if (folder == null) + if (folder == null) { continue; - File libFolder = new File(folder); - if (!libFolder.exists()) - continue; - try { - libFolder = libFolder.getCanonicalFile(); - } catch (IOException iox) { } - jars.addAll(findJars(libFolder)); + File libFolder = new File(folder); + if (!libFolder.exists()) { + continue; + } + List<File> found = findJars(libFolder.getAbsoluteFile()); + jars.addAll(found); } + // sort the jars by name and then reverse the order so the newer version + // of the library gets loaded in the event that this is an upgrade + Collections.sort(jars); + Collections.reverse(jars); if (jars.size() == 0) { for (String folder : folders) { File libFolder = new File(folder); - System.err.println("Failed to find any JARs in " + libFolder.getPath()); + // this is a test of adding a comment + // more really interesting things + System.err.println("Failed to find any really cool JARs in " + libFolder.getPath()); } System.exit(-1); } else { for (File jar : jars) { try { + jar.canRead(); addJarFile(jar); } catch (Throwable t) { t.printStackTrace(); @@ -94,19 +114,16 @@ }); if (libs != null && libs.length > 0) { jars.addAll(Arrays.asList(libs)); - if (debug) { - for (File jar : jars) + if (DEBUG) { + for (File jar : jars) { System.out.println("found " + jar); + } } } } + return jars; } - - /** - * Parameters of the method to add an URL to the System classes. - */ - private static final Class<?>[] parameters = new Class[] { URL.class }; /** * Adds a file to the classpath @@ -121,16 +138,18 @@ return; } URL u = f.toURI().toURL(); - if (debug) + if (DEBUG) { System.out.println("load=" + u.toExternalForm()); + } URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class<?> sysclass = URLClassLoader.class; try { - Method method = sysclass.getDeclaredMethod("addURL", parameters); + Method method = sysclass.getDeclaredMethod("addURL", PARAMETERS); method.setAccessible(true); method.invoke(sysloader, new Object[] { u }); } catch (Throwable t) { - throw new IOException("Error, could not add " + f.getPath() + " to system classloader", t); + throw new IOException(MessageFormat.format( + "Error, could not add {0} to system classloader", f.getPath()), t); } } } -- Gitblit v1.9.1