Используйте Ruby для копирования файлов в файл jar - PullRequest
0 голосов
/ 14 октября 2011

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

Ответы [ 2 ]

1 голос
/ 17 октября 2014

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

Если вам нужно использовать его второе решение, очень важно отметить, что Zip :: ZipOutputStream переопределит любых существующих 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
1 голос
/ 14 октября 2011

Если бы это был я, я бы почти наверняка просто вызвал команду 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, которые могут это сделать. Например

...