How to use 자루스푸트스트림 JAR 파일을 만들려면?

Jar 파일 만들기 '' 을 사용하여 프로그램적으로 제바스티우스자리자루스푸트스트림 어떻게 해야 할까요? Jar 파일은 수정하십시오 때 나는 내 프로그램을 제작한 것 (fine it 추출) 이지만 라리브러리 로드을 시도하시겠습니까 확실히요 내부에 저장된 파일은 자바 또 it 에서 찾을 수 없다는 것입니다. 만약 내가 푸십시오 JAR 파일 및 사용, it 's' 를 jar Sun& # 39 명령줄 도구 re 압축 결과 라이브러리란 작동합니다. 간단히 말해, 뭔가 문제가 있는 내 JAR 파일.

그 이유는 작성하는방법에 JAR 파일을 다른 회사가 함께 완료하십시오 매니페스트 파일.

질문에 대한 의견 (1)
해결책

That '3' 의 문서화되지 않은 쿼크 자루스푸트스트림 나타났다.

  1. / # 39, & # 39 디렉토리 이름을 끝나야 한다. 슬래시 (slash).
  2. / # 39, & # 39 패스이므로 사용해야 합니다. # 39, & # 39 \& 슬래시, 없습니다.
  3. / # 39, & # 39 엔트리입니다 함께 시작할 수 없습니다. 슬래시 (slash).

다음은 만들 수 있는 방법이 수정하십시오 jar 파일:

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
{
  BufferedInputStream in = null;
  try
  {
    if (source.isDirectory())
    {
      String name = source.getPath().replace("\\", "/");
      if (!name.isEmpty())
      {
        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);
      return;
    }

    JarEntry entry = new JarEntry(source.getPath().replace("\\", "/"));
    entry.setTime(source.lastModified());
    target.putNextEntry(entry);
    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();
  }
  finally
  {
    if (in != null)
      in.close();
  }
}
해설 (14)

39 의 there& 다른 &quot quirk"; 낼 수 있다. # 39 의 이름이 안 /&quot 시작하는 모든 JarEntry& ";).

예를 들면 다음과 같습니다. 매니페스트 파일 이름을 &quot META-INF/MANIFEST.MF&quot, jar 를 엔트리여야 있다. /meta-inf/manifest.mf&quot &quot 아니라;;).

모든 jar 엔트리입니다 같은 규칙에 따라야 합니다.

해설 (1)

39 의 일부 샘플 코드를 사용하여 JAR 파일 만들기 위한 here& 자루스푸트스트림:

해설 (3)

이 코드를 함께 할 수 있습니다.

public void write(File[] files, String comment) throws IOException {
    FileOutputStream fos = new FileOutputStream(PATH + FILE);
    JarOutputStream jos = new JarOutputStream(fos, manifest);
    BufferedOutputStream bos = new BufferedOutputStream(jos);
    jos.setComment(comment);
    for (File f : files) {
        print("Writing file: " + f.toString());
        BufferedReader br = new BufferedReader(new FileReader(f));
        jos.putNextEntry(new JarEntry(f.getName()));
        int c;
        while ((c = br.read()) != -1) {
            bos.write(c);
        }
        br.close();
        bos.flush();
    }
    bos.close();
//  JarOutputStream jor = new JarOutputStream(new FileOutputStream(PATH + FILE), manifest);

}

'길' 변수: jar 파일 경로를

'파일' 변수: 이름 및 형식

해설 (6)