Используйте Ruby для копирования файлов в файл jar

#java #ruby #jar #filesystems

#java #ruby #jar #файловые системы

Вопрос:

моя проблема в том, что я хочу добавить некоторые файлы .class из обычного каталога в файл .jar. Должен ли я извлекать его раньше или я могу добавлять файлы «на лету»?

Ответ №1:

Хотя я согласен с Джорданом и предлагаю использовать системную команду, это было не вариант для команды, в которой я работаю.

Если вам нужно использовать его второе решение, чрезвычайно важно отметить, что Zip::ZipOutputStream переопределит все существующие jar; т. Е. Вы не будете добавлять к существующему jar, вы будете создавать новый. Этот код добавит файл в существующий jar:

 require 'zip/zip'

Zip::ZipFile::open 'path/to/jar' do |jar|
  jar.add 'filename_in_jar', 'path/to/file/you/want/to/add'
end
  

Ответ №2:

Если бы это был я, я бы почти наверняка просто вызвал jar команду в Ruby, чтобы сделать это:

 system 'jar uf jar_file.jar input_file(s).class'
# or
%x[ 'jar uf jar_file.jar input_file(s).class' ]
  

Ссылка здесь .

Если вы все еще хотите сделать это без вызова jar , вы должны иметь возможность сделать это с помощью rubyzip, поскольку файлы JAR — это просто ZIP-файлы с определенной структурой. Что-то вроде этого:

 require 'zip/zip'

filename = 'class_file.class'

Zip::ZipOutputStream::open "jar_file.jar" do |zip|
  zip.put_next_entry 'dest/path/in/jar/'   filename  # don't forget the path

  File.open filename, 'rb' {|f| zip.write f.read }
end
  

Есть также несколько оболочек Ruby для libarchive, которые могли бы это сделать. Например.