使用Ruby将文件复制到jar文件中

时间:2011-10-14 17:59:06

标签: java ruby jar filesystems

我的问题是我想将普通目录中的一些.class文件添加到.jar文件中。我是否必须先提取它,还是可以“动态”添加文件?

2 个答案:

答案 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' ]

Reference here.

如果仍然想要在不调用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