1 16 17 import java.io.File ; 18 import java.io.FileInputStream ; 19 import java.io.FileNotFoundException ; 20 import java.lang.reflect.Method ; 21 import java.net.MalformedURLException ; 22 import java.net.URL ; 23 import java.net.URLClassLoader ; 24 import java.net.URLDecoder ; 25 import java.util.ArrayList ; 26 import java.util.Properties ; 27 import java.util.StringTokenizer ; 28 29 56 public class LauncherBootstrap { 57 58 60 63 public final static String ANT_CLASSPATH_PROP_NAME = "ant.class.path"; 64 65 68 public final static String LAUNCHER_JAR_FILE_NAME = "commons-launcher.jar"; 69 70 73 public final static String LAUNCHER_PROPS_FILE_NAME = "launcher.properties"; 74 75 78 public final static String LAUNCHER_MAIN_CLASS_NAME = "org.apache.commons.launcher.Launcher"; 79 80 83 private static Class launcherClass = null; 84 85 87 92 public static void main(String [] args) { 93 94 try { 95 96 URL coreURL = LauncherBootstrap.class.getResource("/" + LauncherBootstrap.LAUNCHER_JAR_FILE_NAME); 99 if (coreURL == null) 100 throw new FileNotFoundException (LauncherBootstrap.LAUNCHER_JAR_FILE_NAME); 101 102 File coreDir = new File (URLDecoder.decode(coreURL.getFile())).getCanonicalFile().getParentFile(); 104 105 File propsFile = new File (coreDir, LauncherBootstrap.LAUNCHER_PROPS_FILE_NAME); 108 if (!propsFile.canRead()) 109 throw new FileNotFoundException (propsFile.getPath()); 110 111 Properties props = new Properties (); 113 FileInputStream fis = new FileInputStream (propsFile); 114 props.load(fis); 115 fis.close(); 116 117 URL [] antURLs = LauncherBootstrap.fileListToURLs((String )props.get(LauncherBootstrap.ANT_CLASSPATH_PROP_NAME)); 120 URL [] urls = new URL [1 + antURLs.length]; 121 urls[0] = coreURL; 122 for (int i = 0; i < antURLs.length; i++) 123 urls[i + 1] = antURLs[i]; 124 ClassLoader parentLoader = Thread.currentThread().getContextClassLoader(); 125 URLClassLoader loader = null; 126 if (parentLoader != null) 127 loader = new URLClassLoader (urls, parentLoader); 128 else 129 loader = new URLClassLoader (urls); 130 131 launcherClass = loader.loadClass(LAUNCHER_MAIN_CLASS_NAME); 133 134 Method getLocalizedStringMethod = launcherClass.getDeclaredMethod("getLocalizedString", new Class []{ String .class }); 137 138 Method startMethod = launcherClass.getDeclaredMethod("start", new Class []{ String [].class }); 142 int returnValue = ((Integer )startMethod.invoke(null, new Object []{ args })).intValue(); 143 System.exit(returnValue); 145 146 } catch (Throwable t) { 147 148 t.printStackTrace(); 149 System.exit(1); 150 151 } 152 153 } 154 155 167 private static URL [] fileListToURLs(String fileList) 168 throws MalformedURLException  169 { 170 171 if (fileList == null || "".equals(fileList)) 172 return new URL [0]; 173 174 ArrayList list = new ArrayList (); 176 StringTokenizer tokenizer = new StringTokenizer (fileList, ":"); 177 URL bootstrapURL = LauncherBootstrap.class.getResource("/" + LauncherBootstrap.class.getName() + ".class"); 178 while (tokenizer.hasMoreTokens()) 179 list.add(new URL (bootstrapURL, tokenizer.nextToken())); 180 181 return (URL [])list.toArray(new URL [list.size()]); 182 183 } 184 185 } 186 | Popular Tags |