Getting Class from jar within a jar list Class from jar within a jar( 如何列出 jar 包中 jar 包里的类)

2017-03-30 17:31:19 +08:00
 twogoods

如这样一个目录/Users/xxx/IdeaProjects/abc/web/target/web.jar!/BOOT-INF/lib/rest-0.0.1.jar!/com/tg/tiny /Users/xxx/IdeaProjects/abc/web/target/web.jar这个 jar 包下的文件目录可以这样得到

JarFile localJarFile = new JarFile(new File("/Users/xxx/IdeaProjects/abc/web/target/web.jar"));
Enumeration<JarEntry> entries = localJarFile.entries();
        while (entries.hasMoreElements()) {
            JarEntry jarEntry = entries.nextElement();
            System.out.println(jarEntry.getName());
        }

那么这个web.jar里的rest-0.0.1.jar下的文件目录如何得到?

1639 次点击
所在节点    Java
3 条回复
leafin
2017-03-31 11:19:21 +08:00
用 JarURLConnection ,给你写了一段,已测试

public static void main(String[] args) throws Exception {
try {
String baseFile = "D:/admin.war";
JarFile jarFile = new JarFile(baseFile);
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
JarEntry jarEntry = entries.nextElement();
if(jarEntry.getName().endsWith(".jar")){
System.out.println("list jar file of " + jarEntry.getName());
URL url = new URL("jar:file:" + baseFile + "!/" + jarEntry.getName());
JarURLConnection urlConnection = (JarURLConnection) url.openConnection();
JarInputStream jarInputStream = new JarInputStream(urlConnection.getInputStream());
JarEntry entry;
int i = 0;
while((entry = jarInputStream.getNextJarEntry()) != null) {
if(entry.isDirectory()){
continue;
}
if(i++ >= 5){
System.out.println();
break;
}
System.out.println(entry.getName());
}
}
}
}catch (Exception e){
e.printStackTrace();
}
}
leafin
2017-03-31 11:19:46 +08:00
不会排版,抱歉了
twogoods
2017-03-31 15:14:33 +08:00
@leafin work !感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/351531

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX