Heim >Java >javaLernprogramm >Wie erstellt man ordnungsgemäß eine JAR-Datei mit JarOutputStream in Java?

Wie erstellt man ordnungsgemäß eine JAR-Datei mit JarOutputStream in Java?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-29 13:42:021025Durchsuche

How to Properly Create a JAR File Using JarOutputStream in Java?

Erstellen einer JAR-Datei mit JarOutputStream

Dieser Artikel befasst sich mit der programmgesteuerten Erstellung von JAR-Dateien mithilfe der Java-Klasse java.util.jar.JarOutputStream. Auch wenn die erstellte JAR-Datei zunächst korrekt aussieht, kann es bei der Verwendung dazu kommen, dass die Bibliotheken nicht geladen werden. Der Grund liegt in bestimmten undokumentierten Macken von JarOutputStream.

Macken von JarOutputStream:

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

Richtiger Ansatz mit JarOutputStream:

Um eine JAR-Datei mit einer Manifestdatei mit der richtigen Methode zu erstellen, befolgen Sie diese Schritte:

  1. Erstellen Sie ein Manifest-Objekt und füllen Sie seine Hauptattribute aus.
  2. Erstellen ein JarOutputStream unter Verwendung des FileOutputStream- und Manifest-Objekts.
  3. Verwenden Sie die add()-Methode, um Dateien und Verzeichnisse rekursiv in die JAR-Datei einzuschließen.

add()-Methode:

<code class="java">private void add(File source, JarOutputStream target) throws IOException {
    String name = source.getPath().replace("/", "/"); // Ensure path uses '/' slash
    if (source.isDirectory()) {
        if (!name.endsWith("/")) {
            name += "/"; // Add trailing '/' for directories
        }
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        target.closeEntry();
        for (File nestedFile : source.listFiles()) {
            add(nestedFile, target);
        }
    } else {
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        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();
        }
    }
}</code>

Durch Befolgen dieser Richtlinien können Sie JAR-Dateien programmgesteuert mit JarOutputStream erstellen, die mit anderen Java-Tools kompatibel sind.

Das obige ist der detaillierte Inhalt vonWie erstellt man ordnungsgemäß eine JAR-Datei mit JarOutputStream in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn