Распаковка jar Manifest.mf является ошибкой каталога - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь распаковать банку в определенное место. Он отлично работает для большинства моих библиотек, но для 2 я получаю сообщение об ошибке, что MANIFEST.MF является каталогом.

Мой код:

public static void extract(File jar, String destination) throws IOException {

        //Creates the Folder for Extracting
        File outputFolder = new File(destination + File.separator + jar.getName());
        if (!outputFolder.exists()) {
            outputFolder.mkdir();
        }

        // Extract the Jar
        ZipInputStream zis = new ZipInputStream(new FileInputStream(jar));
        ZipEntry ze = zis.getNextEntry();

        while (ze != null) {
            String filePath = outputFolder + File.separator + ze.getName();
            if (!ze.isDirectory()) {
                //&& !ze.getName().contains("MANIFEST.MF")
                // If the entry is a file, extract it, otherwise ...
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
                byte[] bytesIn = new byte[BUFFER_SIZE];
                int read = 0;
                while ((read = zis.read(bytesIn)) != -1) {
                    bos.write(bytesIn, 0, read);
                }
                bos.close();
            } else {
                // ... create a directory
                File dir = new File(filePath);
                dir.mkdir();
            }
            // close entry and move on to the next one
            zis.closeEntry();
            ze = zis.getNextEntry();
        }
        zis.close();
    }

И вывод моей консоли:

Extract Jar: jackson-databind-2.9.1.jar
Extract Jar: guava-23.0.jar
Extract Jar: mockito-core-2.10.0.jar
Extract Jar: mockito-all-1.10.19.jar
Extract Jar: clojure-1.8.0.jar
Extract Jar: slf4j-log4j12-1.7.25.jar
Extract Jar: scala-library-2.13.0-M2.jar
java.io.FileNotFoundException: /home/tim/.m2/VulnerabilityChecker/TempFiles/scala-library-2.13.0-M2.jar/META-INF/MANIFEST.MF (Ist ein Verzeichnis)
Extract Jar: log4j-1.2.17.jar
    at java.base/java.io.FileOutputStream.open0(Native Method)
    at java.base/java.io.FileOutputStream.open(FileOutputStream.java:276)
    at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:220)
    at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:109)
    at HelperClasses.JarExtractor.extract(JarExtractor.java:94)
    at libraryChecker.jarUtility.JarFinder.getSearchedJarFromList(JarFinder.java:46)
    at libraryChecker.jarUtility.JarCrawler.searchForFittingJarFile(JarCrawler.java:18)
    at schwachstellenkorrektursuche.LibraryChecker.start(LibraryChecker.java:86)
    at schwachstellenkorrektursuche.Main.main(Main.java:9)
Extract Jar: javax.servlet-api-4.0.0.jar
Extract Jar: commons-lang-2.6.jar
Extract Jar: tools.nrepl-0.2.13.jar
Extract Jar: clojure-complete-0.2.4.jar
java.io.FileNotFoundException: /home/tim/.m2/VulnerabilityChecker/TempFiles/clojure-complete-0.2.4.jar/META-INF/MANIFEST.MF (Ist ein Verzeichnis)
    at java.base/java.io.FileOutputStream.open0(Native Method)
    at java.base/java.io.FileOutputStream.open(FileOutputStream.java:276)
    at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:220)
    at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:109)
    at HelperClasses.JarExtractor.extract(JarExtractor.java:94)
    at libraryChecker.jarUtility.JarFinder.getSearchedJarFromList(JarFinder.java:46)
    at libraryChecker.jarUtility.JarCrawler.searchForFittingJarFile(JarCrawler.java:18)
    at schwachstellenkorrektursuche.LibraryChecker.start(LibraryChecker.java:86)
    at schwachstellenkorrektursuche.Main.main(Main.java:9)
Extract Jar: commons-lang3-3.6.jar
Extract Jar: maven-core-2.2.1.jar
Extract Jar: logback-classic-1.2.3.jar
Extract Jar: junit-4.12.jar
Extract Jar: slf4j-api-1.7.25.jar
Extract Jar: httpclient-4.5.3.jar
Extract Jar: maven-core-2.2.1-sources.jar
Extract Jar: commons-io-2.5.jar
Extract Jar: servlet-api-2.5.jar
Extract Jar: commons-logging-1.2.jar

Метод "Извлечь банку: ..." вызывается до вызова метода извлечения, не беспокойтесь об этом. Моя главная идея - игнорировать MANIFEST.MF (см. Комментарий после предложения if), если я не могу найти какое-либо решение, но мне не нравится это решение, потому что я не знаю, нужно ли оно мне позже, и мне просто любопытно, почему это случается ... Я подумал, что я должен спросить некоторых с большим опытом;) Есть мысли?

...