The War trait sets up the layout and generates web.xml for the war project.
# File lib/warbler/traits/war.rb, line 114 def add_executables(jar) webserver = WEB_SERVERS[config.webserver.to_s] webserver.add(jar) add_runnables jar, webserver.main_class || 'WarMain' end
# File lib/warbler/traits/war.rb, line 120 def add_gemjar(jar) gem_jar = Warbler::Jar.new gem_path = Regexp::quote(config.relative_gem_path) gems = jar.files.select{|k,v| k =~ %{#{gem_path}/} } gems.each do |k,v| gem_jar.files[k.sub(%{#{gem_path}/}, '')] = v end jar.files["WEB-INF/lib/gems.jar"] = "tmp/gems.jar" jar.files.reject!{|k,v| k =~ /#{gem_path}/ || k == "WEB-INF/tmp/gems.jar"} mkdir_p "tmp" gem_jar.add_manifest gem_jar.create("tmp/gems.jar") end
Add public/static assets to the root of the war file.
# File lib/warbler/traits/war.rb, line 86 def add_public_files(jar) config.public_html.exclude *(config.excludes.to_a) config.public_html.map {|f| jar.add_with_pathmaps(config, f, :public_html) } end
# File lib/warbler/traits/war.rb, line 103 def add_runnables(jar, main_class = 'WarMain') main_class = main_class.sub('.class', '') # handles WarMain.class unless config.manifest_file manifest = Warbler::Jar::DEFAULT_MANIFEST.chomp + "Main-Class: #{main_class}\n" jar.files['META-INF/MANIFEST.MF'] = StringIO.new(manifest) end [ 'JarMain', 'WarMain', main_class ].uniq.each do |klass| jar.files["#{klass}.class"] = jar.entry_in_jar(WARBLER_JAR, "#{klass}.class") end end
Add web.xml and other WEB-INF configuration files from config.webinf_files to the war file.
# File lib/warbler/traits/war.rb, line 93 def add_webxml(jar) config.webinf_files.each do |wf| if wf =~ /\.erb$/ jar.files[apply_pathmaps(config, wf, :webinf)] = jar.expand_erb(wf, config) else jar.files[apply_pathmaps(config, wf, :webinf)] = wf end end end
# File lib/warbler/traits/war.rb, line 35 def after_configure update_gem_path(DEFAULT_GEM_PATH) end
# File lib/warbler/traits/war.rb, line 24 def before_configure config.gem_path = DEFAULT_GEM_PATH config.pathmaps = default_pathmaps config.webxml = default_webxml_config config.webinf_files = default_webinf_files config.java_libs = default_jar_files config.public_html = FileList["public/**/*"] config.jar_extension = 'war' config.init_contents << "#{config.warbler_templates}/war.erb" end
# File lib/warbler/traits/war.rb, line 70 def default_jar_files require 'jruby-jars' require 'jruby-rack' FileList[JRubyJars.core_jar_path, JRubyJars.stdlib_jar_path, JRubyJars.jruby_rack_jar_path] end
# File lib/warbler/traits/war.rb, line 39 def default_pathmaps p = OpenStruct.new p.public_html = ["%{public/,}p"] p.java_libs = ["WEB-INF/lib/%f"] p.java_classes = ["WEB-INF/classes/%p"] p.application = ["WEB-INF/%p"] p.webinf = ["WEB-INF/%{.erb$,}f"] p.gemspecs = ["#{config.relative_gem_path}/specifications/%f"] p.gems = ["#{config.relative_gem_path}/gems/%p"] p end
# File lib/warbler/traits/war.rb, line 59 def default_webinf_files webxml = if File.exist?("config/web.xml") "config/web.xml" elsif File.exist?("config/web.xml.erb") "config/web.xml.erb" else "#{WARBLER_HOME}/web.xml.erb" end FileList[webxml] end
# File lib/warbler/traits/war.rb, line 51 def default_webxml_config c = WebxmlOpenStruct.new c.public.root = '/' c.jndi = nil c.ignored = %(jndi booter) c end
# File lib/warbler/traits/war.rb, line 153 def empty_jar @empty_jar ||= begin t = Tempfile.new(["empty", "jar"]) path = t.path t.close! ZipSupport.create(path) do |zipfile| zipfile.mkdir("META-INF") zipfile.get_output_stream("META-INF/MANIFEST.MF") {|f| f << ::Warbler::Jar::DEFAULT_MANIFEST } end at_exit { File.delete(path) } path end end
# File lib/warbler/traits/war.rb, line 134 def move_jars_to_webinf_lib(jar, selector = nil) return unless selector # default is false selector = /.*/ if selector == true # move all if not a RegExp given default_jars = default_jar_files.map { |file| File.basename(file) } jar.files.keys.select { |k| k =~ /^WEB-INF\/.*\.jar$/ }.each do |k| if k.start_with?('WEB-INF/lib/') # .jar already in WEB-INF/lib if default_jars.include? k.sub('WEB-INF/lib/', '') # exclude default jar (if it's not matched by selector) : jar.files.delete(k) unless selector =~ File.basename(k) end next end next unless selector =~ File.basename(k) name = k.sub('WEB-INF', '')[1..-1].gsub(/[\/\\]/, '-') jar.files["WEB-INF/lib/#{name}"] = jar.files[k] jar.files[k] = empty_jar end end
# File lib/warbler/traits/war.rb, line 76 def update_archive(jar) add_public_files(jar) add_webxml(jar) move_jars_to_webinf_lib(jar, config.move_jars_to_webinf_lib) add_runnables(jar) if config.features.include?("runnable") add_executables(jar) if config.features.include?("executable") add_gemjar(jar) if config.features.include?("gemjar") end
Generated with the Darkfish Rdoc Generator 2.