La création de fichiers JAR par programme à l'aide de java.util.jar.JarOutputStream entraîne souvent des incohérences. Bien que les fichiers JAR produits puissent sembler valides et extractibles, ils rencontrent des problèmes lors du chargement des bibliothèques. Bien qu'il contienne les fichiers requis, Java ne parvient pas à les localiser. Cette différence entre les fichiers JAR générés par programme et ceux créés à l'aide de l'outil de ligne de commande jar de Sun nécessite une compréhension du problème sous-jacent.
Enquêter sur les subtilités de JarOutputStream révèle trois bizarreries non documentées qui jouent un rôle crucial dans la création réussie de fichiers JAR :
Pour résoudre ces bizarreries et créer correctement des fichiers JAR, le code suivant illustre l'approche appropriée :
<code class="java">public void run() throws IOException { Manifest manifest = new Manifest(); manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0"); JarOutputStream target = new JarOutputStream(new FileOutputStream("output.jar"), manifest); add(new File("inputDirectory"), target); target.close(); } private void add(File source, JarOutputStream target) throws IOException { String name = source.getPath().replace("\", "/"); if (source.isDirectory()) { if (!name.endsWith("/")) { name += "/"; } 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>
En adhérant à ces directives, les fichiers JAR générés par programme refléteront avec précision leur contenu et élimineront les problèmes de chargement rencontrés lors de leur extraction ou de leur utilisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!