我的问题是我想将普通目录中的一些.class文件添加到.jar文件中。我是否必须先提取它,还是可以“动态”添加文件?
答案 0 :(得分:1)
如果是我,我几乎肯定会在Ruby中调用jar
命令来执行此操作:
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
还有一些用于libarchive的Ruby包装器可以做到这一点。 E.g.
答案 1 :(得分:1)
虽然我同意Jordan并建议使用系统命令,但这不是我工作的团队的选择。
如果你必须使用他的第二个解决方案,请务必注意Zip :: ZipOutputStream将override任何现有的jar;即,您不会添加到现有的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