"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo evitar problemas inesperados al crear archivos JAR con JarOutputStream de Java?

¿Cómo evitar problemas inesperados al crear archivos JAR con JarOutputStream de Java?

Publicado el 2024-11-09
Navegar:671

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

Solución de problemas de JarOutputStream para la creación de archivos JAR

Crear archivos JAR mediante programación usando java.util.jar.JarOutputStream puede parecer sencillo, pero ciertos matices pueden generar problemas inesperados. Este artículo explora estas peculiaridades no documentadas y proporciona una solución integral para crear archivos JAR válidos.

Comprensión de las peculiaridades

Al usar JarOutputStream, es fundamental cumplir con las siguientes reglas no documentadas:

  • Los nombres de directorio deben terminar con una barra diagonal '/'.
  • Las rutas deben emplear barras diagonales '/', no '\'.
  • Las entradas no pueden comenzar con una barra diagonal '/' .

Implementación del enfoque correcto

Aquí hay un ejemplo detallado de cómo crear un archivo JAR con un archivo de manifiesto, abordando las peculiaridades antes mencionadas:

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();
        }
    }
}

Al seguir estas pautas, ahora puedes crear con confianza archivos JAR válidos mediante programación, garantizando que las bibliotecas y otros recursos incluidos en ellos sean accesibles según lo previsto.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3