เนื่องจากว่าการทำงานส่วนมาก ต้องเขียน Business Logic ที่ Store Procedure ใน MS-SQL ทำให้เกิดความลำบากกับการทำ version ของโค๊ดเป็นอย่างมาก เลยอยากจะเขียน Script สั่นๆสักตัวเพื่อดูด Store Procedure มาเก็บเป้นไฟล์ให้ แล้วเราจะได้ดูสิ่งที่ต่างกัน (Diff) และเก็บลง SVN Server ส่วนตัว (ที่ทำงานใช้ CVS ซึ่งไม่ชอบเอาซะเลย)
ก็เลยกะว่างานนี้เขียนสั่นๆ เอา Groovy ดีกว่า ก็เลยเริ่มจาก start groovy console (run>cmd>groovyConsole ) จากนั้นก็เริ่มเขียน code
ทันใดนั้นนึงขึ้นมาได้ว่า กูจะ add jar ยังไงว่ะ ไม่ได้ start เป็น project เอ้ หรือว่า จะไปสร้าง classpath ยังไงละเนี่ย ก็เลยลองไปหาว่าเจ้า Groovy Console มันจะ add classpath ได้ไงบ้าง
ไปเจอที่บอกว่าให้แก groovy start แต่เอ้ มันไม่เท่อ่ะ ไหน groovy บอกว่าตัวเองเป็น dynamic ก็นึกว่ามันจะเอา env ข้างๆมาให้ด้วย เลยเอา jar ไปวางใน Folder ที่ทำการสั่ง groovyConsole (ในใจนึงว่ามันจะเหมือน grails console) เอ๋ ไม่ได้นี่นา
ไม่ไหวแระ ไหนๆก็ไหนๆ เลยลองเขียน ให้ JAVA มันโหลด JAR แบบ on the fly เลยละกัน ไม่อยากเขียน cmd ไป เรียก class
public static void dynmicLoadJar() { File libFolder = new File("libs"); System.out.println("folder: " +libFolder.getAbsolutePath()); File[] jars = libFolder.listFiles(); System.out.println("jar: " + jars); List<URL> urls = new ArrayList<URL>(); for (int i = 0; i < jars.length; i++) { if (jars[i].toString().contains(".jar")) { try { urls.add(jars[i].toURL()); } catch (MalformedURLException e) { e.printStackTrace(); } } } for (URL url : urls) { try { System.out.println("Dynamic add " + url.toString() + " to class path"); URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class clazz = URLClassLoader.class; Method method = clazz.getDeclaredMethod("addURL", new Class[]{URL.class}); method.setAccessible(true); method.invoke(classLoader, new Object[]{url}); Thread.currentThread().getContextClassLoader().getResourceAsStream("context.xml"); } catch (Exception ex) { System.err.println("Error when dynamic load jar"); ex.printStackTrace(); } } }
ซึ่งจะทำการโหลด JAR ที่อยู่ใน folder libs มาให้เอง โดยใช้ reflection ยัดเข้าไปใน URLClassLoader ของ Java
