> Java > java지도 시간 > Java의 JarOutputStream을 사용하여 JAR 파일을 생성하는 동안 예기치 않은 문제를 방지하는 방법은 무엇입니까?

Java의 JarOutputStream을 사용하여 JAR 파일을 생성하는 동안 예기치 않은 문제를 방지하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-29 11:23:02
원래의
918명이 탐색했습니다.

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

JAR 파일 생성을 위한 JarOutputStream 문제 해결

java.util.jar.JarOutputStream을 사용하여 프로그래밍 방식으로 JAR 파일을 생성하는 것은 간단해 보일 수 있지만 특정 차이로 인해 예기치 않은 문제가 발생할 수 있습니다. 이 문서에서는 이러한 문서화되지 않은 문제를 살펴보고 유효한 JAR 파일을 생성하기 위한 포괄적인 솔루션을 제공합니다.

특이점 이해

JarOutputStream을 사용할 때는 다음과 같은 문서화되지 않은 규칙을 준수하는 것이 중요합니다.

  • 디렉터리 이름은 '/' 슬래시로 끝나야 합니다.
  • 경로는 ''가 아닌 '/' 슬래시를 사용해야 합니다.
  • 항목은 '/' 슬래시로 시작할 수 없습니다.

올바른 접근 방식 구현

다음은 앞서 언급한 문제점을 해결하면서 매니페스트 파일로 JAR 파일을 생성하는 방법에 대한 자세한 예입니다.

<code class="java">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();
        }
    }
}</code>
로그인 후 복사

By 이러한 지침을 따르면 이제 프로그래밍 방식으로 유효한 JAR 파일을 자신있게 생성하여 해당 파일에 포함된 라이브러리 및 기타 리소스에 의도한 대로 액세스할 수 있습니다.

위 내용은 Java의 JarOutputStream을 사용하여 JAR 파일을 생성하는 동안 예기치 않은 문제를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿