«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как избежать неожиданных проблем при создании файлов JAR с помощью Java JarOutputStream?

Как избежать неожиданных проблем при создании файлов JAR с помощью Java JarOutputStream?

Опубликовано 9 ноября 2024 г.
Просматривать:281

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

Устранение неполадок JarOutputStream для создания файлов JAR

Программное создание файлов JAR с использованием java.util.jar.JarOutputStream может показаться простым, но некоторые нюансы могут привести к неожиданным проблемам. В этой статье рассматриваются эти недокументированные особенности и предлагается комплексное решение для создания действительных файлов JAR.

Понимание особенностей

При использовании JarOutputStream крайне важно придерживаться следующих недокументированных правил:

  • Имена каталогов должны заканчиваться символом '/' косая черта.
  • Пути должны использовать косую черту '/', а не '\'.
  • Записи не могут начинаться с косой черты '/'.

Реализация правильного подхода

Вот подробный пример того, как создать файл JAR с файлом манифеста, учитывающий вышеупомянутую проблему. причуды:

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

Следуя этим рекомендациям, вы теперь можете уверенно создавать действительные файлы JAR программным способом, гарантируя, что библиотеки и другие ресурсы, включенные в них, доступны по назначению.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3