twogoods
V2EX  ›  Java

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

  •  
  •   twogoods · Mar 30, 2017 · 2149 views
    This topic created in 3357 days ago, the information mentioned may be changed or developed.

    如这样一个目录/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下的文件目录如何得到?

    3 replies    2017-03-31 15:14:33 +08:00
    leafin
        1
    leafin  
       Mar 31, 2017
    用 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
        2
    leafin  
       Mar 31, 2017
    不会排版,抱歉了
    twogoods
        3
    twogoods  
    OP
       Mar 31, 2017
    @leafin work !感谢!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   981 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:25 · PVG 06:25 · LAX 15:25 · JFK 18:25
    ♥ Do have faith in what you're doing.