是的,互聯網說 - 「解壓縮它們,反編譯,並用一些工具比較代碼(總comander,WinCompare,meld(linux),任何...)爲什麼我需要一個工具從Fodler1和Folder2自動生成差異報告的原因很簡單 - 這些文件夾中有太多的JAR,我需要比較這些文件夾(與下一個JARS版本),說1次在一個。本月所以,我真的不希望在所有做手工比較JARs內容的優雅方法
讓我們來看看,我這麼遠!
1)我可以找到的每個文件夾:)
所有的JAR2)I可以得到的類別從每個JAR清單:
private static void AddAllClassesFromJAR(JarInputStream jarFile,
ArrayList<String> classes) throws IOException {
JarEntry jarEntry = null;
while (true) {
jarEntry = jarFile.getNextJarEntry();
if (jarEntry == null) {
break;
}
if (jarEntry.getName().endsWith(".class")) {
classes.add(jarEntry.getName());
}
}
}
public static List<String> getClasseNamesInPackage(String jarName) {
ArrayList<String> classes = new ArrayList<String>();
try {
JarInputStream jarFile = new JarInputStream(new FileInputStream(jarName));
AddAllClassesFromJAR(jarFile, classes);
} catch (Exception e) {
e.printStackTrace();
}
return classes;
}
3)是反映在爪哇(Java核心2第一卷 - 基本原理,實施例5-5),所以可獲取列表一旦我知道它的名字,就可以從一個類中找到方法
爲了做到這一點,我需要爲每個類創建一個實例,問題是我怎樣才能讓每個JAR文件獲得的每個類的實例? 現在我加載每個JAR:
loader_left = new JarClassLoader("left/1.jar");
public class JarClassLoader extends URLClassLoader {
public JarClassLoader(URL url) {
super(new URL[]{url});
}
public JarClassLoader(String urlString) throws MalformedURLException {
this(new URL("jar:file://" + urlString + "!/"));
}
沒有例外,但它,我無法找到任何資源,試圖加載類,如:
class_left = loader_left.loadClass("level1.level2.class1");
並獲得「java.lang中。 ClassNotFoundException的」。
任何膠水問題在哪裏? (類名是驗證的,它是硬編碼只是爲了測試,理想情況下它應該從類的列表中獲得)
第二個問題:因爲Folder1和Folder2中的大多數類都是相同的,所以如果我第二次加載相同的類(來自Fodler2)?
只是想知道爲什麼你需要這樣做。 – vickirk 2012-04-19 12:50:27