Как создать файл jar без записи имени каталога?

#java #jar

#java #jar

Вопрос:

Тест папки содержит различные файлы и скоросшиватели. Я хочу создать jar, который содержит только вложенные папки и файлы теста, без имени каталога (Test) в иерархии.

Я пытался:

  ProcessBuilder createJarProcess2 = new ProcessBuilder("jar", "cMf", "test.jar","test");
 p = createJarProcess2.start();
 stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
 // read any errors from the attempted command
 while ((s = stdError.readLine()) != null) {
       System.out.println(s);
 }
 p.waitFor();
 System.out.println("create jar 2  "   p.exitValue());
  

Но включает также имя каталога.

Спасибо

Комментарии:

1. Jar — это программа, написанная на Java, не так ли? Таким образом, должна быть возможность создать Jar на чистой Java, без вызова ProcessBuilder.

2. @пользователь неизвестен: На самом деле ‘Jar’ — это более точно переименованный Zip. Он более специализирован на определенных сжатиях и указании формата файла манифеста, но Jar не обязательно должен содержать классы (или манифест), чтобы быть действительным Jar. 1 за ваш второй пункт.

3. @Andrew: Я не оспариваю это, но меня беспокоит то, что вы можете получить доступ к java.util.jar.JarFile и JarEntry изначально из Java, без использования Processbuilder. Это независимо от содержимого файла jar. Это могут быть классы с манифестом. Возможно, это не так.

Ответ №1:

Смотрите -C опцию:

Временно изменяет каталоги на dir при обработке следующего аргумента inputfiles. Допустимы несколько наборов входных файлов в каталоге C.

Пример:

 jar cMf test.jar -C Test .
  

Удачного кодирования.