Как создать jar-файл с помощью Ява.утиль.фляги.JarOutputStream
? Файл jar произведены моя программа выглядит правильно (он извлекает нормально) но когда я пытаюсь загрузить библиотеку из Ява жалуется, что он не может найти файлы, которые хорошо хранятся в нем. Если я извлечь jar файл и использовать Солнце'инструмент командной строки с фляги
повторно сжать его в результате чего библиотека отлично работает. Короче, что-то не так с моим файлом jar.
Объясните, пожалуйста, как создать jar файл программно, в комплекте с файлом манифеста.
Получается, что JarOutputStream
имеет три незарегистрированных закидоны:
Вот это правильный путь для создания файла 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();
}
}
Там'ы еще один "бзик", чтобы обратить внимание: все JarEntry'ы имена не должны начинаться с quot&;/" по.
Например: имя запись jar для файл манифеста является "мета-инф/манифеста.МФ" и не " по - /мета-инф/манифеста.МФ" по.
То же правило следует соблюдать для всех записей банку.
Здесь's некоторые примеры кода для создания jar-файл с помощью JarOutputStream:
Вы можете сделать это с помощью этого кода:
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);
}
Переменной PATH
: путь к файлу jar
Файл
переменной: имя и формат