warbler_updated 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +10 -0
  3. data/History.txt +411 -0
  4. data/LICENSE.txt +27 -0
  5. data/Mavenfile +32 -0
  6. data/README.rdoc +280 -0
  7. data/Rakefile +63 -0
  8. data/bin/warble +11 -0
  9. data/ext/JarMain.java +334 -0
  10. data/ext/WarMain.java +375 -0
  11. data/ext/WarblerJar.java +199 -0
  12. data/ext/WarblerJarService.java +18 -0
  13. data/lib/warbler/application.rb +104 -0
  14. data/lib/warbler/bundler_helper.rb +22 -0
  15. data/lib/warbler/config.rb +265 -0
  16. data/lib/warbler/executable_helper.rb +25 -0
  17. data/lib/warbler/gems.rb +77 -0
  18. data/lib/warbler/jar.rb +348 -0
  19. data/lib/warbler/pathmap_helper.rb +20 -0
  20. data/lib/warbler/platform_helper.rb +26 -0
  21. data/lib/warbler/rake_helper.rb +30 -0
  22. data/lib/warbler/scripts/rails.rb +5 -0
  23. data/lib/warbler/task.rb +185 -0
  24. data/lib/warbler/templates/bundler.erb +19 -0
  25. data/lib/warbler/templates/config.erb +1 -0
  26. data/lib/warbler/templates/jar.erb +11 -0
  27. data/lib/warbler/templates/jbundler.erb +2 -0
  28. data/lib/warbler/templates/rack.erb +5 -0
  29. data/lib/warbler/templates/rails.erb +1 -0
  30. data/lib/warbler/templates/war.erb +19 -0
  31. data/lib/warbler/traits/bundler.rb +157 -0
  32. data/lib/warbler/traits/gemspec.rb +79 -0
  33. data/lib/warbler/traits/jar.rb +58 -0
  34. data/lib/warbler/traits/jbundler.rb +48 -0
  35. data/lib/warbler/traits/nogemspec.rb +47 -0
  36. data/lib/warbler/traits/rack.rb +33 -0
  37. data/lib/warbler/traits/rails.rb +91 -0
  38. data/lib/warbler/traits/war.rb +260 -0
  39. data/lib/warbler/traits.rb +124 -0
  40. data/lib/warbler/version.rb +10 -0
  41. data/lib/warbler/war.rb +8 -0
  42. data/lib/warbler/web_server.rb +125 -0
  43. data/lib/warbler/zip_support.rb +13 -0
  44. data/lib/warbler.rb +40 -0
  45. data/lib/warbler_jar.jar +0 -0
  46. data/warble.rb +188 -0
  47. data/warbler.gemspec +37 -0
  48. data/web.xml.erb +57 -0
  49. metadata +188 -0
@@ -0,0 +1,348 @@
1
+ #--
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
+ # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
+ # This source code is available under the MIT license.
5
+ # See the file LICENSE.txt for details.
6
+ #++
7
+
8
+ require 'warbler/zip_support'
9
+ require 'stringio'
10
+ require 'pathname'
11
+
12
+ module Warbler
13
+ # Class that holds the files that will be stored in the jar file.
14
+ # The #files attribute contains a hash of pathnames inside the jar
15
+ # file to their contents. Contents can be one of:
16
+ # * +nil+ representing a directory entry
17
+ # * Any object responding to +read+ representing an in-memory blob
18
+ # * A String filename pointing to a file on disk
19
+ class Jar
20
+ include PathmapHelper
21
+ include RakeHelper
22
+ include PlatformHelper
23
+
24
+ DEFAULT_MANIFEST = %{Manifest-Version: 1.0\nCreated-By: Warbler #{Warbler::VERSION}\n\n}
25
+
26
+ attr_reader :files
27
+ attr_reader :app_filelist
28
+
29
+ def initialize
30
+ @files = {}
31
+ end
32
+
33
+ def contents(entry)
34
+ file = files[entry]
35
+ file.respond_to?(:read) ? file.read : File.read(file)
36
+ end
37
+
38
+ def compile(config)
39
+ find_gems_files(config)
40
+ # Compiling all Ruby files we can find -- do we need to allow an
41
+ # option to configure what gets compiled?
42
+ return if (config.compiled_ruby_files.nil? || config.compiled_ruby_files.empty?) && files.empty?
43
+
44
+ if config.compile_gems
45
+ ruby_files = gather_all_rb_files(config)
46
+ run_jrubyc(config, ruby_files.values)
47
+ replace_compiled_ruby_files_and_gems(config, ruby_files)
48
+ else
49
+ compiled_ruby_files = config.compiled_ruby_files - config.excludes.to_a
50
+ run_jrubyc(config, compiled_ruby_files)
51
+ replace_compiled_ruby_files(config, compiled_ruby_files)
52
+ end
53
+ end
54
+
55
+ DEFAULT_COMPILED_FILES_SLICE = 2500
56
+
57
+ def run_jrubyc(config, compiled_ruby_files)
58
+ slice_size = (ENV['WARBLER_COMPILED_FILES_SLICE'] || 0).to_i
59
+ slice_size = DEFAULT_COMPILED_FILES_SLICE if slice_size <= 0
60
+ compiled_ruby_files.each_slice(slice_size) do |files|
61
+ files = "\"#{files.join('" "')}\""
62
+ classpath = config.java_libs.map { |lib| "\"#{lib.gsub('"', '\\"')}\"" }.join(File::PATH_SEPARATOR)
63
+ # Need to use the version of JRuby in the application to compile it
64
+ javac_cmd = %Q{java -classpath #{classpath} #{java_version(config)} org.jruby.Main -S jrubyc #{jrubyc_options(config)} #{files}}
65
+ if which('java').nil? && which('env')
66
+ sh_jrubyc %Q{env -i #{javac_cmd}}
67
+ else
68
+ sh_jrubyc javac_cmd
69
+ end
70
+ end
71
+ @compiled = true
72
+ end
73
+ # @deprecated only due compatibility
74
+ alias_method :run_javac, :run_jrubyc
75
+
76
+ def sh_jrubyc(cmd)
77
+ sh(cmd) do |ok, res|
78
+ raise "Compilation of .rb files failed (#{res})" unless ok
79
+ end
80
+ end
81
+ private :sh_jrubyc
82
+
83
+ def jrubyc_options(config)
84
+ options = ENV['WARBLER_JRUBYC_OPTIONS'] || config.jrubyc_options
85
+ options = options.join(' ') if options.is_a?(Array)
86
+ options || ''
87
+ end
88
+ private :jrubyc_options
89
+
90
+ def java_version(config)
91
+ config.bytecode_version ? "-Djava.specification.version=#{config.bytecode_version}" : ''
92
+ end
93
+
94
+ def replace_compiled_ruby_files(config, compiled_ruby_files)
95
+ # Exclude the rb files and recreate them. This
96
+ # prevents the original contents being used.
97
+ config.excludes += compiled_ruby_files
98
+
99
+ compiled_ruby_files.each do |ruby_source|
100
+ files[apply_pathmaps(config, ruby_source, :application)] = StringIO.new("load __FILE__.sub(/\.rb$/, '.class')")
101
+ end
102
+ end
103
+
104
+ def replace_compiled_ruby_files_and_gems(config, compiled_ruby_files)
105
+ # Exclude the rb files and recreate them. This
106
+ # prevents the original contents being used.
107
+ config.excludes += compiled_ruby_files.keys
108
+
109
+ compiled_ruby_files.each do |inside_jar, file_system_location|
110
+ # The gems are already inside the gems folder inside the jar, however when using the :gems pathmap, they will
111
+ # get put into the gems/gems folder, to prevent this we chop off the first gems folder directory
112
+ inside_jar = inside_jar.dup
113
+ if inside_jar.split(File::SEPARATOR).first == 'gems'
114
+ inside_jar = inside_jar.split(File::SEPARATOR)[1..-1].join(File::SEPARATOR)
115
+ pathmap = :gems
116
+ else
117
+ pathmap = :application
118
+ end
119
+ files[apply_pathmaps(config, inside_jar, pathmap)] = StringIO.new("load __FILE__.sub(/\.rb$/, '.class')")
120
+ files[apply_pathmaps(config, inside_jar.sub(/\.rb$/, '.class'), pathmap)] = file_system_location.sub(/\.rb$/, '.class')
121
+ end
122
+ end
123
+
124
+ #
125
+ def gather_all_rb_files(config)
126
+ FileUtils.mkdir_p('tmp')
127
+ # Gather all the files in the files list and copy them to the tmp directory
128
+ files_to_compile = files.select { |_, f| !f.is_a?(StringIO) && f.end_with?('.rb') }
129
+ files_to_compile.each do |jar_file, rb|
130
+ FileUtils.mkdir_p(File.dirname(File.join('tmp', jar_file)))
131
+ new_rb = File.join('tmp', jar_file)
132
+ FileUtils.copy(rb, new_rb)
133
+ files_to_compile[jar_file] = new_rb
134
+ end
135
+ # Gather all the application files which the user wrote (not dependencies)
136
+ main_files_to_compile = config.compiled_ruby_files - config.excludes.to_a
137
+ main_files_to_compile.each do |f|
138
+ FileUtils.mkdir_p(File.dirname(File.join('tmp', f)))
139
+ FileUtils.copy(f, File.join('tmp', f))
140
+ end
141
+ main_files_to_compile = main_files_to_compile.inject({}) {|h,f| h.merge!(f => f) }
142
+ files.keys.each do |k|
143
+ # Update files list to point to the temporary file
144
+ files[k] = files_to_compile[k] || main_files_to_compile[k] || files[k]
145
+ end
146
+ main_files_to_compile.merge(files_to_compile)
147
+ end
148
+
149
+ # Apply the information in a Warbler::Config object in order to
150
+ # look for files to put into this war file.
151
+ def apply(config)
152
+ find_application_files(config)
153
+ find_java_libs(config)
154
+ find_java_classes(config)
155
+ find_gems_files(config)
156
+ add_manifest(config)
157
+ add_init_file(config)
158
+ add_script_files(config)
159
+ apply_traits(config)
160
+ end
161
+
162
+ # Create the jar or war file. The single argument can either be a
163
+ # Warbler::Config or a filename of the file to create.
164
+ def create(config_or_path)
165
+ path = config_or_path
166
+ if Warbler::Config === config_or_path
167
+ path = "#{config_or_path.jar_name}.#{config_or_path.jar_extension}"
168
+ path = File.join(config_or_path.autodeploy_dir, path) if config_or_path.autodeploy_dir
169
+ end
170
+ rm_f path
171
+ ensure_directory_entries
172
+ if Warbler::Config === config_or_path
173
+ @files.delete("#{config_or_path.jar_name}/#{path}")
174
+ end
175
+ puts "Creating #{path}" unless silent?
176
+ create_jar path, @files
177
+ end
178
+
179
+ # Invoke a hook to allow the project traits to add or modify the archive contents.
180
+ def apply_traits(config)
181
+ config.update_archive(self)
182
+ end
183
+
184
+ # Add a manifest file either from config or by making a default manifest.
185
+ def add_manifest(config = nil)
186
+ unless @files.keys.detect{ |k| k =~ /^META-INF\/MANIFEST\.MF$/i }
187
+ if config && config.manifest_file
188
+ @files['META-INF/MANIFEST.MF'] = config.manifest_file
189
+ else
190
+ @files['META-INF/MANIFEST.MF'] = StringIO.new(DEFAULT_MANIFEST)
191
+ end
192
+ end
193
+ end
194
+
195
+ # Add java libraries to WEB-INF/lib.
196
+ def find_java_libs(config)
197
+ config.java_libs.map { |lib| add_with_pathmaps(config, lib, :java_libs) }
198
+ end
199
+
200
+ # Add java classes to WEB-INF/classes.
201
+ def find_java_classes(config)
202
+ config.java_classes.map { |f| add_with_pathmaps(config, f, :java_classes) }
203
+ end
204
+
205
+ # Add gems to WEB-INF/gems
206
+ def find_gems_files(config)
207
+ unless @compiled && config.compile_gems
208
+ config.gems.specs(config.gem_dependencies).each {|spec| find_single_gem_files(config, spec) }
209
+ end
210
+ end
211
+
212
+ # Add a single gem to WEB-INF/gems
213
+ def find_single_gem_files(config, spec)
214
+ full_gem_path = Pathname.new(spec.full_gem_path)
215
+
216
+ # skip gems whose full_gem_path does not exist
217
+ unless full_gem_path.exist?
218
+ # its very likely that its a default gem e.g. json/jruby-openssl :
219
+ if (Gem.default_dir rescue nil) && full_gem_path.to_s.start_with?(Gem.default_dir)
220
+ # OK if the gem does not exists as its un-packed on the "shared" path
221
+ # ... at least gem spec.spec_file should exists although not crucial
222
+ if JRUBY_VERSION != JRubyJars::VERSION
223
+ warn "skipping #{spec.name} default gem (assuming its part of jruby-jars #{JRubyJars::VERSION})" unless silent?
224
+ end
225
+ else
226
+ warn "skipping #{spec.name} gem (#{full_gem_path.to_s} does not exist)"
227
+ end
228
+ return
229
+ end
230
+
231
+ @files[apply_pathmaps(config, "#{spec.full_name}.gemspec", :gemspecs)] = StringIO.new(spec.to_ruby)
232
+ FileList["#{full_gem_path.to_s}/**/*"].each do |src|
233
+ f = Pathname.new(src).relative_path_from(full_gem_path).to_s
234
+ next if config.gem_excludes && config.gem_excludes.any? {|rx| f =~ rx }
235
+ @files[apply_pathmaps(config, File.join(spec.full_name, f), :gems)] = src
236
+ end
237
+ if File.exist?(spec.gem_build_complete_path)
238
+ base_dir = Pathname.new(spec.base_dir)
239
+ gem_build_complete_path = Pathname.new(spec.gem_build_complete_path)
240
+ @files[File.join(config.relative_gem_path, gem_build_complete_path.relative_path_from(base_dir))] = spec.gem_build_complete_path
241
+ end
242
+ end
243
+
244
+ # Add all application directories and files to the archive.
245
+ def find_application_files(config)
246
+ config.dirs.select do |d|
247
+ exists = File.directory?(d)
248
+ warn "application directory `#{d}' does not exist or is not a directory; skipping" unless exists
249
+ exists
250
+ end.each do |d|
251
+ @files[apply_pathmaps(config, d, :application)] = nil
252
+ end
253
+ @app_filelist = FileList[*(config.dirs.map{|d| %W{#{d}/**/*/**/* #{d}/*}}.flatten)]
254
+ @app_filelist.include( *(config.includes.to_a) )
255
+ @app_filelist.exclude( *(config.excludes.to_a) )
256
+ @app_filelist.map {|f| add_with_pathmaps(config, f, :application) }
257
+ end
258
+
259
+ # Add init.rb file to the war file.
260
+ def add_init_file(config)
261
+ if config.init_contents
262
+ contents = ''
263
+ config.init_contents.each do |file|
264
+ if file.respond_to?(:read)
265
+ contents << file.read
266
+ elsif File.extname(file) == '.erb'
267
+ contents << expand_erb(file, config).read
268
+ else
269
+ contents << File.read(file)
270
+ end
271
+ end
272
+ @files[config.init_filename] = StringIO.new(contents)
273
+ end
274
+ end
275
+
276
+ def add_script_files(config)
277
+ config.script_files.each do |file|
278
+ @files["META-INF/#{File.basename(file)}"] = StringIO.new(File.read(file))
279
+ end
280
+ end
281
+
282
+ def add_with_pathmaps(config, f, map_type)
283
+ @files[apply_pathmaps(config, f, map_type)] = f
284
+ end
285
+
286
+ def expand_erb(file, config)
287
+ require 'erb'
288
+ erb = ERB.new(File.read(file), nil, '-')
289
+ StringIO.new(erb.result(erb_binding(config)))
290
+ end
291
+
292
+ def erb_binding(config)
293
+ webxml = config.webxml
294
+ binding
295
+ end
296
+
297
+ def ensure_directory_entries
298
+ files.select {|k,v| !v.nil? }.each do |k,v|
299
+ dir = File.dirname(k)
300
+ while dir != "." && !files.has_key?(dir)
301
+ files[dir] = nil
302
+ dir = File.dirname(dir)
303
+ end
304
+ end
305
+ end
306
+
307
+ def create_jar(jar_path, entries)
308
+ ZipSupport.create(jar_path) do |zipfile|
309
+ entries.keys.sort.each do |entry|
310
+ src = entries[entry]
311
+ if src.respond_to?(:read)
312
+ zipfile.get_output_stream(entry) { |f| f << src.read }
313
+ elsif src.nil? || File.directory?(src)
314
+ if File.symlink?(entry) && ! defined?(JRUBY_VERSION)
315
+ warn "directory symlinks are not followed unless using JRuby; " +
316
+ "#{entry.inspect} contents not in archive"
317
+ end
318
+ zipfile.mkdir(entry.dup) # in case it's frozen rubyzip 0.9.6.1 workaround
319
+ elsif File.symlink?(src)
320
+ zipfile.get_output_stream(entry) { |f| f << File.read(src) }
321
+ elsif File.exist?(src)
322
+ zipfile.add(entry, src)
323
+ else
324
+ warn "file not found; #{entry.inspect} not in archive"
325
+ end
326
+ end
327
+ end
328
+ end
329
+
330
+ def entry_in_jar(jar, entry)
331
+ ZipSupport.open(jar) do |zf|
332
+ zf.get_input_stream(entry) {|io| StringIO.new(io.read) }
333
+ end
334
+ end
335
+
336
+ # Java-boosted jar creation for JRuby; replaces #create_jar and
337
+ # #entry_in_jar with Java version
338
+ require 'warbler_jar' if defined?(JRUBY_VERSION) && JRUBY_VERSION >= "1.5"
339
+ end
340
+
341
+ # Warbler::War is Deprecated. Please use Warbler::Jar.
342
+ class War < Jar
343
+ def initialize(*)
344
+ super
345
+ warn "Warbler::War is deprecated. Please replace all occurrences with Warbler::Jar."
346
+ end
347
+ end
348
+ end
@@ -0,0 +1,20 @@
1
+ #--
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
+ # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
+ # This source code is available under the MIT license.
5
+ # See the file LICENSE.txt for details.
6
+ #++
7
+
8
+ module Warbler
9
+ module PathmapHelper
10
+ def apply_pathmaps(config, file, pathmaps)
11
+ file = file.to_s
12
+ file = file[2..-1] if file =~ /^\.\//
13
+ pathmaps = config.pathmaps.send(pathmaps)
14
+ pathmaps.each do |p|
15
+ file = file.pathmap(p)
16
+ end if pathmaps
17
+ file
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ #--
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
+ # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
+ # This source code is available under the MIT license.
5
+ # See the file LICENSE.txt for details.
6
+ #++
7
+
8
+ module Warbler
9
+ module PlatformHelper
10
+ # Cross-platform way of finding an executable in the $PATH.
11
+ # Thanks to @mislav
12
+ #
13
+ # which('ruby') #=> /usr/bin/ruby
14
+ def which(cmd)
15
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
16
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
17
+ exts.each { |ext|
18
+ exe = File.join(path, "#{cmd}#{ext}")
19
+ return exe if File.executable? exe
20
+ }
21
+ end
22
+ return nil
23
+ end
24
+ end
25
+ end
26
+
@@ -0,0 +1,30 @@
1
+ #--
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
+ # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
+ # This source code is available under the MIT license.
5
+ # See the file LICENSE.txt for details.
6
+ #++
7
+
8
+ module Warbler
9
+ module RakeHelper
10
+
11
+ def self.included(base)
12
+ base.class_eval do
13
+ include Rake::DSL if defined?(Rake::DSL)
14
+ include Rake::FileUtilsExt # includes FileUtils
15
+ end
16
+ end
17
+
18
+ def self.extended(base)
19
+ base.extend Rake::DSL if defined?(Rake::DSL)
20
+ base.extend Rake::FileUtilsExt
21
+ end
22
+
23
+ private
24
+
25
+ def silent?
26
+ Rake.application.options.silent rescue nil
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
4
+ require File.expand_path('../../config/boot', __FILE__)
5
+ require 'rails/commands'
@@ -0,0 +1,185 @@
1
+ #--
2
+ # Copyright (c) 2010-2012 Engine Yard, Inc.
3
+ # Copyright (c) 2007-2009 Sun Microsystems, Inc.
4
+ # This source code is available under the MIT license.
5
+ # See the file LICENSE.txt for details.
6
+ #++
7
+
8
+ require 'rake'
9
+ require 'rake/tasklib'
10
+ require 'warbler/config'
11
+ require 'warbler/jar'
12
+
13
+ module Warbler
14
+ # Warbler Rake task. Allows defining multiple configurations inside the same
15
+ # Rakefile by using different task names.
16
+ #
17
+ # To define multiple Warbler configurations in a single project, use
18
+ # code like the following in a Rakefile:
19
+ #
20
+ # Warbler::Task.new("war1", Warbler::Config.new do |config|
21
+ # config.jar_name = "war1"
22
+ # # ...
23
+ # end
24
+ # Warbler::Task.new("war2", Warbler::Config.new do |config|
25
+ # config.jar_name = "war2"
26
+ # # ...
27
+ # end
28
+ #
29
+ # With this setup, you can create two separate war files two
30
+ # different configurations by running <tt>rake war1 war2</tt>.
31
+ class Task < Rake::TaskLib
32
+ include RakeHelper
33
+
34
+ # Task name
35
+ attr_accessor :name
36
+
37
+ # Warbler::Config
38
+ attr_accessor :config
39
+
40
+ # Warbler::Jar
41
+ attr_accessor :jar
42
+
43
+ def initialize(name = nil, config = nil)
44
+ @config = config
45
+ if @config.nil? && File.exists?(Config::FILE)
46
+ @config = eval(File.read(Config::FILE), binding, Config::FILE, 0)
47
+ end
48
+ @config ||= Config.new
49
+ unless @config.kind_of? Config
50
+ warn "Warbler::Config not provided by override in initializer or #{Config::FILE}; using defaults"
51
+ @config = Config.new
52
+ end
53
+ @name = name || @config.jar_extension
54
+ @jar = Warbler::Jar.new
55
+ yield self if block_given?
56
+ define_tasks
57
+ end
58
+
59
+ # Deprecated: attr_accessor :war
60
+ alias war jar
61
+
62
+ private
63
+ def define_tasks
64
+ define_main_task
65
+ namespace name do
66
+ define_clean_task
67
+ define_compiled_task
68
+ define_files_task
69
+ define_jar_task
70
+ define_debug_task
71
+ define_config_task
72
+ define_pluginize_task
73
+ define_version_task
74
+ define_extra_tasks
75
+ end
76
+ end
77
+
78
+ def define_main_task
79
+ desc "Create the project #{config.jar_extension} file"
80
+ task @name do
81
+ unless @config.features.empty?
82
+ @config.features.each do |feature|
83
+ t = "#@name:#{feature}"
84
+ unless Rake.application.lookup(t)
85
+ warn "unknown feature `#{feature}', ignoring"
86
+ next
87
+ end
88
+ Rake::Task[t].invoke
89
+ end
90
+ end
91
+ # Invoke this way so custom dependencies can be defined before
92
+ # the file find routine is run
93
+ ["#{@name}:files", "#{@name}:jar"].each do |t|
94
+ Rake::Task[t].invoke
95
+ end
96
+ end
97
+ end
98
+
99
+ def define_clean_task
100
+ desc "Remove the project #{config.jar_extension} file"
101
+ task "clean" do
102
+ rm_f "#{config.jar_name}.#{config.jar_extension}"
103
+ end
104
+ task "clear" => "#{name}:clean"
105
+ end
106
+
107
+ def define_compiled_task
108
+ task "compiled" do
109
+ jar.compile(config)
110
+ task @name do
111
+ rm_f config.compiled_ruby_files.map {|f| f.sub(/\.rb$/, '.class') }
112
+ end
113
+ end
114
+ end
115
+
116
+ def define_files_task
117
+ task "files" do
118
+ jar.apply(config)
119
+ end
120
+ end
121
+
122
+ def define_jar_task
123
+ task "jar" do
124
+ jar.create(config)
125
+ end
126
+ end
127
+
128
+ def define_debug_task
129
+ desc "Dump diagnostic information"
130
+ task "debug" => "files" do
131
+ require 'yaml'
132
+ puts config.dump
133
+ jar.files.each {|k,v| puts "#{k} -> #{String === v ? v : '<blob>'}"}
134
+ end
135
+ task "debug:includes" => "files" do
136
+ puts "", "included files:"
137
+ puts( *war.app_filelist.include )
138
+ end
139
+ task "debug:excludes" => "files" do
140
+ puts "", "excluded files:"
141
+ puts( *war.app_filelist.exclude )
142
+ end
143
+ end
144
+
145
+ def define_extra_tasks
146
+ @config.define_tasks
147
+ end
148
+
149
+ def define_config_task
150
+ task "config" do
151
+ if File.exists?(Warbler::Config::FILE) && ENV["FORCE"].nil?
152
+ puts "There's another bird sitting on my favorite branch"
153
+ puts "(file '#{Warbler::Config::FILE}' already exists. Pass argument FORCE=1 to override)"
154
+ elsif !File.directory?("config")
155
+ puts "I'm confused; my favorite branch is missing"
156
+ puts "(directory 'config' is missing)"
157
+ else
158
+ cp "#{Warbler::WARBLER_HOME}/warble.rb", Warbler::Config::FILE
159
+ end
160
+ end
161
+ end
162
+
163
+ def define_pluginize_task
164
+ task "pluginize" do
165
+ if !Dir["lib/tasks/warbler*"].empty? && ENV["FORCE"].nil?
166
+ puts "I found an old nest in lib/tasks; please trash it so I can make a new one"
167
+ puts "(directory lib/tasks/warbler* exists)"
168
+ else
169
+ rm_rf FileList["lib/tasks/warbler*"], :verbose => false
170
+ mkdir_p "lib/tasks/warbler"
171
+ File.open("lib/tasks/warbler/warbler.rake", "w") do |f|
172
+ f.puts "require 'warbler'"
173
+ f.puts "Warbler::Task.new"
174
+ end
175
+ end
176
+ end
177
+ end
178
+
179
+ def define_version_task
180
+ task "version" do
181
+ puts "Warbler version #{Warbler::VERSION}"
182
+ end
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,19 @@
1
+ ENV['BUNDLE_WITHOUT'] = '<%= config.bundle_without.join(':') %>'
2
+ <% if config.bundler[:frozen] -%>
3
+ ENV['BUNDLE_FROZEN'] = '1'
4
+ <% end -%>
5
+
6
+ module Bundler
7
+ module Patch
8
+ def clean_load_path
9
+ # nothing to be done for embedded JRuby
10
+ end
11
+ end
12
+ module SharedHelpers
13
+ def included(bundler)
14
+ bundler.send :include, Patch
15
+ end
16
+ end
17
+ end
18
+
19
+ require 'bundler/shared_helpers'
@@ -0,0 +1 @@
1
+ WARBLER_CONFIG = <%= config.webxml ? config.webxml.context_params(false).inspect : '{}' %>
@@ -0,0 +1,11 @@
1
+ <% if config.relative_gem_path.empty? -%>
2
+ ENV['GEM_HOME'] <%= config.override_gem_home ? '=' : '||=' %> File.expand_path(File.join('..', '..', '<%= config.gem_path %>'), __FILE__)
3
+ <% else -%>
4
+ ENV['GEM_HOME'] <%= config.override_gem_home ? '=' : '||=' %> File.expand_path(File.join('..', '..', '<%= config.relative_gem_path %>'), __FILE__)
5
+ <% end -%>
6
+ <% if config.override_gem_home -%>
7
+ ENV['GEM_PATH'] = nil # RGs sets Gem.paths.path = Gem.default_path + [ GEM_HOME ]
8
+ <% end -%>
9
+ <% if config.bundler && config.bundler[:gemfile_path] -%>
10
+ ENV['BUNDLE_GEMFILE'] = File.expand_path(File.join('..', '..', '<%= config.bundler[:gemfile_path] %>'), __FILE__)
11
+ <% end -%>
@@ -0,0 +1,2 @@
1
+ # the jars are already loaded via the servlet classloader
2
+ ENV['JBUNDLE_SKIP'] = 'true'
@@ -0,0 +1,5 @@
1
+ <% if ((params = config.webxml.context_params) && params['rack.env']) || ENV_JAVA['RACK_ENV'] -%>
2
+ ENV['RACK_ENV'] ||= ENV_JAVA['RACK_ENV'] || '<%= params['rack.env'] %>'
3
+ <% end -%>
4
+
5
+ $LOAD_PATH.unshift $servlet_context.getRealPath('/WEB-INF') if $servlet_context
@@ -0,0 +1 @@
1
+ ENV['RAILS_ENV'] ||= ENV_JAVA[ 'RAILS_ENV' ] || '<%= config.webxml.rails.env %>'
@@ -0,0 +1,19 @@
1
+ if $servlet_context.nil?
2
+ ENV['GEM_HOME'] <%= config.override_gem_home ? '=' : '||=' %> File.expand_path(File.join('..', '..', '<%= config.gem_path %>'), __FILE__)
3
+ <% if config.override_gem_home -%>
4
+ <% # GEM_HOME/GEM_PATH are set as .war gets extracted (on java -jar ...)
5
+ # ... thus setting `ENV['GEM_PATH'] = nil` would cause a boot failure
6
+ -%>
7
+ <% end -%>
8
+ <% if config.bundler && config.bundler[:gemfile_path] -%>
9
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path(File.join('..', '..', '<%= config.bundler[:gemfile_path] %>'), __FILE__)
10
+ <% end -%>
11
+ else
12
+ ENV['GEM_HOME'] <%= config.override_gem_home ? '=' : '||=' %> $servlet_context.getRealPath('<%= config.gem_path %>')
13
+ <% if config.override_gem_home -%>
14
+ ENV['GEM_PATH'] = nil
15
+ <% end -%>
16
+ <% if config.bundler && config.bundler[:gemfile_path] -%>
17
+ ENV['BUNDLE_GEMFILE'] ||= $servlet_context.getRealPath('/<%= config.bundler[:gemfile_path] %>')
18
+ <% end -%>
19
+ end