是的,互联网说 - “解压缩它们,反编译,并用一些工具比较代码(总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