我正在努力寻找一些替代库,以便浏览一些.war文件。
问题是我需要解析WAR文件,然后根据名称和JAR文件中的一些内容找到特定的JAR。然后,我必须解析那些jar中的内容,例如pom.xml,以创建一个单独的maven项目模块,该模块只附加了来自其他资源的某些依赖项和配置。我发现java.util.zip包有点不方便和混乱。
是否有一些java.util.zip的替代方案可以让解析/读取大战变得不那么麻烦,比如在ZipFile/ZipEntry->JarFile/JarEntry之间切换?可以像对待目录一样处理war归档中的zip/war/jar和jar文件的东西?或者必须制定自己的解决方案?
谢谢你,
我将ZipInputStream
用于类似的任务:如果将一个ZipInputStream
封装到另一个中,则可以透明地访问另一个归档中的归档,而无需拆包顶级归档。以下是演示如何使用它的简短示例:
public class ZipTest {
public static void main(String[] args) throws IOException {
try(InputStream is = new FileInputStream(args[0]))
{
listZipEntries(1, is);
}
}
private static void listZipEntries(int indent, InputStream is) throws IOException {
ZipInputStream zip = new ZipInputStream(is);
while(true) {
ZipEntry entry = zip.getNextEntry();
if(entry == null)
return;
System.out.printf("%"+indent+"s%sn", "", entry.getName());
if(entry.getName().endsWith(".zip") || entry.getName().endsWith(".jar"))
listZipEntries(indent+3, zip);
}
}
}
它转储zip档案中的文件名。若遇到名称以.zip
或.jar
结尾的文件,它会进入内部并递归地转储它。对我来说,它看起来很简单,不需要第三方代码。