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