Class | JavaClass::Classpath::JarClasspath |
In: |
lib/javaclass/classpath/jar_classpath.rb
|
Parent: | FileClasspath |
Abstraction of a ZIP or JAR on the CLASSPATH. May return additional classpath elements for referenced libs. This is a leaf in the classpath tree.
Author: | Peter Kofler |
Create a classpath with this jarfile .
# File lib/javaclass/classpath/jar_classpath.rb, line 33 def initialize(jarfile) super(jarfile) unless JarClasspath::valid_location?(jarfile) raise IOError, "jarfile #{jarfile} not found/no file" end @jarfile = jarfile init_classes @manifest = JavaClass::Gems::ZipFile.new(@jarfile).read('META-INF/MANIFEST.MF') setup_cache if JavaClass.unpack_jars? end
Check if the file is a valid location for a jar classpath.
# File lib/javaclass/classpath/jar_classpath.rb, line 28 def self.valid_location?(file) FileTest.exist?(file) && FileTest.file?(file) && FileTest.size(file) > 0 && file =~ /\.jar$|\.zip$/ end
Return list of additional classpath elements defined in the manifest of this jarfile.
# File lib/javaclass/classpath/jar_classpath.rb, line 50 def additional_classpath if @manifest cp = @manifest.gsub(/\s{4,}/, ' ').scan(/^(.*): (.*)\s*$/).find { |p| p[0] == 'Class-Path' } if cp cp[1].strip.split.collect { |jar| File.join(File.dirname(@jarfile), jar) } else [] end else [] end end
Return the number of classes in this jar.
# File lib/javaclass/classpath/jar_classpath.rb, line 91 def count @class_names.size end
Return if classname is included in this jar.
# File lib/javaclass/classpath/jar_classpath.rb, line 73 def includes?(classname) @class_lookup[to_key(classname).file_name] end
Return true as this classpath element is a jar. Zip files return false as well.
# File lib/javaclass/classpath/jar_classpath.rb, line 45 def jar? @manifest != nil end
Load the binary data of the file name or class name classname from this jar.
# File lib/javaclass/classpath/jar_classpath.rb, line 78 def load_binary(classname) key = to_key(classname) if JavaClass.unpack_jars? @delegate.load_binary(key) else unless includes?(key) raise ClassNotFoundError.new(key, @jarfile) end JavaClass::Gems::ZipFile.new(@jarfile).read(key).freeze end end