2009-11-11 98 views
2

我在看雅虎YUI壓縮機可執行的JAR文件,他們有這個類,從清單文件鏈接爲「主類」:Java可執行文件jar。這段代碼是做什麼的?

package com.yahoo.platform.yui.compressor; 

import java.lang.reflect.Method; 

public class Bootstrap { 

    public static void main(String args[]) throws Exception { 
     ClassLoader loader = new JarClassLoader(); 
     Thread.currentThread().setContextClassLoader(loader); 
     Class c = loader.loadClass(YUICompressor.class.getName()); 
     Method main = c.getMethod("main", new Class[]{String[].class}); 
     main.invoke(null, new Object[]{args}); 
    } 
} 

它看起來像一個無用的包裝給我。爲什麼不直接把YUICompressor作爲主要類?這樣做有什麼理由嗎?

謝謝。

回答

1

這似乎是創建一個全新的類加載器。這是一個(不完美)機制,用於將獨立的類的副本加載到相同的運行JVM中。

如果YUI的東西使用了很多靜態變量,例如,這可能是一個解決方法,因爲靜態變量是每個ClassLoader

1

這裏的活性成分是JarClassLoader。這可以爲主方法提供一個全新的環境,類路徑的類和其他資源組件可以從(可能)從整個事物運行的jar文件中加載。

BigJar這樣的手勢使用這種手勢,它允許你將一堆jar文件合併成一個大的(因此是名字)可執行jar文件。

是的,設置一個全新的類加載器實際上是實現這一目標的唯一方法。