KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > launch > Launcher


1 /*
2  * Copyright (c) 2005, Rob Gordon.
3  */

4 package org.oddjob.launch;
5
6 import java.io.File JavaDoc;
7 import java.lang.reflect.Method JavaDoc;
8 import java.net.MalformedURLException JavaDoc;
9 import java.net.URL JavaDoc;
10 import java.net.URLClassLoader JavaDoc;
11
12 /**
13  * Launch Oddjob using a classloader with the following:
14  * <ul>
15  * <li>Any jars in the lib directory.</li>
16  * <li>Any jars in the opt/lib directory.</li>
17  * <li>The opt/classes directory.</li>
18  * </ul>
19  *
20  * TODO: This class does not set the system.class.path property and
21  * it should.
22  *
23  * @author Rob Gordon.
24  */

25 public class Launcher {
26
27     public static final String JavaDoc MAIN_CLASS = "org.oddjob.Main";
28     
29     public static void main(String JavaDoc args[]) {
30         try {
31             Launcher launcher = new Launcher();
32             launcher.run(args);
33         } catch (Throwable JavaDoc t) {
34             t.printStackTrace();
35         }
36     }
37     
38     void run(String JavaDoc args[]) {
39         ClassLoader JavaDoc currentLoader = Thread.currentThread().getContextClassLoader();
40         ClassLoader JavaDoc loader = getClassLoader(currentLoader);
41         Thread.currentThread().setContextClassLoader(loader);
42         try {
43             Class JavaDoc mainClass = loader.loadClass(MAIN_CLASS);
44             
45             // use reflection because main is now in another
46
// class loader space so we can't get at it.
47
Method JavaDoc method = mainClass
48                 .getMethod("main",
49                         new Class JavaDoc[] { new String JavaDoc[0].getClass() });
50             method.invoke(null, new Object JavaDoc[] { args });
51         } catch (Throwable JavaDoc t) {
52             t.printStackTrace();
53         } finally {
54             Thread.currentThread().setContextClassLoader(currentLoader);
55         }
56     }
57
58     ClassLoader JavaDoc getClassLoader(ClassLoader JavaDoc currentLoader) {
59         File JavaDoc sourceJar = Locator.getClassSource(getClass());
60         File JavaDoc jarDir = sourceJar.getParentFile();
61                 
62         File JavaDoc[] libFiles = new FileSpec(new File JavaDoc(new File JavaDoc(jarDir,"lib"), "*.jar")).getFiles();
63         File JavaDoc[] optFiles = new FileSpec(new File JavaDoc(new File JavaDoc(jarDir,"opt/lib"), "*.jar")).getFiles();
64         
65         URL JavaDoc[] urls = new URL JavaDoc[2 + libFiles.length + optFiles.length];
66         try {
67             urls[0] = sourceJar.toURL();
68             urls[1] = new File JavaDoc(jarDir, "opt/classes").toURL();
69             int index = 2;
70             for (int i = 0; i < libFiles.length; ++i) {
71                 urls[index++] = libFiles[i].toURL();
72             }
73             for (int i = 0; i < optFiles.length; ++i) {
74                 urls[index++] = optFiles[i].toURL();
75             }
76         }
77         catch (MalformedURLException JavaDoc e) {
78             e.printStackTrace();
79         }
80         
81         ClassLoader JavaDoc cl = new URLClassLoader JavaDoc(urls);
82         return cl;
83     }
84 }
85
Popular Tags