„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie vermeide ich unerwartete Probleme beim Erstellen von JAR-Dateien mit Javas JarOutputStream?

Wie vermeide ich unerwartete Probleme beim Erstellen von JAR-Dateien mit Javas JarOutputStream?

Veröffentlicht am 09.11.2024
Durchsuche:346

How to Avoid Unexpected Issues While Creating JAR Files with Java\'s JarOutputStream?

Fehlerbehebung bei JarOutputStream für die JAR-Dateierstellung

Das programmgesteuerte Erstellen von JAR-Dateien mit java.util.jar.JarOutputStream kann unkompliziert erscheinen, aber bestimmte Nuancen können zu unerwarteten Problemen führen. Dieser Artikel untersucht diese undokumentierten Macken und bietet eine umfassende Lösung zum Erstellen gültiger JAR-Dateien.

Die Macken verstehen

Bei der Verwendung von JarOutputStream ist es wichtig, die folgenden undokumentierten Regeln einzuhalten:

  • Verzeichnisnamen müssen mit einem „/“ enden Schrägstrich.
  • Pfade sollten „/“-Schrägstriche verwenden, nicht „\“.
  • Einträge dürfen nicht mit einem „/“-Schrägstrich beginnen.

Implementierung des richtigen Ansatzes

Hier ist ein detailliertes Beispiel für die Erstellung einer JAR-Datei mit einer Manifestdatei, das die oben genannten Probleme behebt Macken:

public void run() throws IOException {
    // Prepare the manifest file
    Manifest manifest = new Manifest();
    manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");

    // Create a new JAROutputStream with the manifest
    JarOutputStream target = new JarOutputStream(new FileOutputStream("output.jar"), manifest);

    // Iterate over the source directory and add files to the JAR
    add(new File("inputDirectory"), target);

    // Close the JAROutputStream
    target.close();
}

private void add(File source, JarOutputStream target) throws IOException {
    // Prepare the entry path
    String name = source.getPath().replace("\\", "/");

    // Handle directories
    if (source.isDirectory()) {
        if (!name.endsWith("/")) {
            name  = "/";
        }
        // Create a directory entry with appropriate timestamps
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        target.closeEntry();

        // Recursively add files within the directory
        for (File nestedFile : source.listFiles()) {
            add(nestedFile, target);
        }
    } 
    // Handle files
    else {
        // Create a file entry with appropriate timestamps
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);

        // Read and write the file contents to the JAR
        try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(source))) {
            byte[] buffer = new byte[1024];
            while (true) {
                int count = in.read(buffer);
                if (count == -1)
                    break;
                target.write(buffer, 0, count);
            }
            target.closeEntry();
        }
    }
}

Wenn Sie diese Richtlinien befolgen, können Sie jetzt sicher gültige JAR-Dateien programmgesteuert erstellen und so sicherstellen, dass auf Bibliotheken und andere darin enthaltene Ressourcen wie vorgesehen zugegriffen werden kann.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3