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.
- checksums.yaml +7 -0
- data/Gemfile +10 -0
- data/History.txt +411 -0
- data/LICENSE.txt +27 -0
- data/Mavenfile +32 -0
- data/README.rdoc +280 -0
- data/Rakefile +63 -0
- data/bin/warble +11 -0
- data/ext/JarMain.java +334 -0
- data/ext/WarMain.java +375 -0
- data/ext/WarblerJar.java +199 -0
- data/ext/WarblerJarService.java +18 -0
- data/lib/warbler/application.rb +104 -0
- data/lib/warbler/bundler_helper.rb +22 -0
- data/lib/warbler/config.rb +265 -0
- data/lib/warbler/executable_helper.rb +25 -0
- data/lib/warbler/gems.rb +77 -0
- data/lib/warbler/jar.rb +348 -0
- data/lib/warbler/pathmap_helper.rb +20 -0
- data/lib/warbler/platform_helper.rb +26 -0
- data/lib/warbler/rake_helper.rb +30 -0
- data/lib/warbler/scripts/rails.rb +5 -0
- data/lib/warbler/task.rb +185 -0
- data/lib/warbler/templates/bundler.erb +19 -0
- data/lib/warbler/templates/config.erb +1 -0
- data/lib/warbler/templates/jar.erb +11 -0
- data/lib/warbler/templates/jbundler.erb +2 -0
- data/lib/warbler/templates/rack.erb +5 -0
- data/lib/warbler/templates/rails.erb +1 -0
- data/lib/warbler/templates/war.erb +19 -0
- data/lib/warbler/traits/bundler.rb +157 -0
- data/lib/warbler/traits/gemspec.rb +79 -0
- data/lib/warbler/traits/jar.rb +58 -0
- data/lib/warbler/traits/jbundler.rb +48 -0
- data/lib/warbler/traits/nogemspec.rb +47 -0
- data/lib/warbler/traits/rack.rb +33 -0
- data/lib/warbler/traits/rails.rb +91 -0
- data/lib/warbler/traits/war.rb +260 -0
- data/lib/warbler/traits.rb +124 -0
- data/lib/warbler/version.rb +10 -0
- data/lib/warbler/war.rb +8 -0
- data/lib/warbler/web_server.rb +125 -0
- data/lib/warbler/zip_support.rb +13 -0
- data/lib/warbler.rb +40 -0
- data/lib/warbler_jar.jar +0 -0
- data/warble.rb +188 -0
- data/warbler.gemspec +37 -0
- data/web.xml.erb +57 -0
- metadata +188 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2014-2015 JRuby Team
|
3
|
+
# This source code is available under the MIT license.
|
4
|
+
# See the file LICENSE.txt for details.
|
5
|
+
#++
|
6
|
+
|
7
|
+
module Warbler
|
8
|
+
module BundlerHelper
|
9
|
+
def to_spec(spec)
|
10
|
+
# JRuby <= 1.7.20 does not handle respond_to? with method_missing right
|
11
|
+
# thus a `spec.respond_to?(:to_spec) ? spec.to_spec : spec` won't do :
|
12
|
+
if ::Bundler.const_defined?(:StubSpecification) # since Bundler 1.10.1
|
13
|
+
spec = spec.to_spec if spec.is_a?(::Bundler::StubSpecification)
|
14
|
+
else
|
15
|
+
spec = spec.to_spec if spec.respond_to?(:to_spec)
|
16
|
+
end
|
17
|
+
spec
|
18
|
+
end
|
19
|
+
module_function :to_spec
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,265 @@
|
|
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 'set'
|
9
|
+
require 'warbler/gems'
|
10
|
+
require 'warbler/traits'
|
11
|
+
|
12
|
+
module Warbler
|
13
|
+
# Warbler archive assembly configuration class.
|
14
|
+
class Config
|
15
|
+
include RakeHelper
|
16
|
+
|
17
|
+
TOP_DIRS = %w(app db config lib log script vendor)
|
18
|
+
FILE = "config/warble.rb"
|
19
|
+
BUILD_GEMS = %w(warbler rake rcov)
|
20
|
+
|
21
|
+
include Traits
|
22
|
+
|
23
|
+
# Features: additional options controlling how the jar is built.
|
24
|
+
# Currently the following features are supported:
|
25
|
+
# - gemjar: package the gem repository in a jar file in WEB-INF/lib
|
26
|
+
# - executable: embed a web server and make the war executable
|
27
|
+
# - compiled: compile .rb files to .class files
|
28
|
+
attr_accessor :features
|
29
|
+
|
30
|
+
# Traits: an array of trait classes corresponding to
|
31
|
+
# characteristics of the project that are either auto-detected or
|
32
|
+
# configured.
|
33
|
+
attr_accessor :traits
|
34
|
+
|
35
|
+
# Deprecated: No longer has any effect.
|
36
|
+
attr_accessor :staging_dir
|
37
|
+
|
38
|
+
# Directory where the war file will be written. Can be used to direct
|
39
|
+
# Warbler to place your war file directly in your application server's
|
40
|
+
# autodeploy directory. Defaults to the root of the application directory.
|
41
|
+
attr_accessor :autodeploy_dir
|
42
|
+
|
43
|
+
# Top-level directories to be copied into WEB-INF. Defaults to
|
44
|
+
# names in TOP_DIRS
|
45
|
+
attr_accessor :dirs
|
46
|
+
|
47
|
+
# Additional files beyond the top-level directories to include in the
|
48
|
+
# WEB-INF directory
|
49
|
+
attr_accessor :includes
|
50
|
+
|
51
|
+
# Files to exclude from the WEB-INF directory
|
52
|
+
attr_accessor :excludes
|
53
|
+
|
54
|
+
# Java classes and other files to copy to WEB-INF/classes
|
55
|
+
attr_accessor :java_classes
|
56
|
+
|
57
|
+
# Java libraries to copy to WEB-INF/lib
|
58
|
+
attr_accessor :java_libs
|
59
|
+
|
60
|
+
# Rubygems to install into the webapp.
|
61
|
+
attr_accessor :gems
|
62
|
+
|
63
|
+
# Whether to include dependent gems (default true)
|
64
|
+
attr_accessor :gem_dependencies
|
65
|
+
|
66
|
+
# Array of regular expressions matching relative paths in gems to
|
67
|
+
# be excluded from the war. Default contains no exclusions.
|
68
|
+
attr_accessor :gem_excludes
|
69
|
+
|
70
|
+
# Whether to exclude **/*.log files (default is true)
|
71
|
+
attr_accessor :exclude_logs
|
72
|
+
|
73
|
+
# Public HTML directory file list, to be copied into the root of the war
|
74
|
+
attr_accessor :public_html
|
75
|
+
|
76
|
+
# Container of pathmaps used for specifying source-to-destination transformations
|
77
|
+
# under various situations (<tt>public_html</tt> and <tt>java_classes</tt> are two
|
78
|
+
# entries in this structure).
|
79
|
+
attr_accessor :pathmaps
|
80
|
+
|
81
|
+
# Executable of the jar
|
82
|
+
attr_accessor :executable
|
83
|
+
|
84
|
+
# parameters to pass to the executable
|
85
|
+
attr_accessor :executable_params
|
86
|
+
|
87
|
+
# Name of jar or war file (without the extension), defaults to the
|
88
|
+
# directory name containing the application.
|
89
|
+
attr_accessor :jar_name
|
90
|
+
|
91
|
+
# Extension of jar file. Defaults to <tt>jar</tt> or <tt>war</tt> depending on the project.
|
92
|
+
attr_accessor :jar_extension
|
93
|
+
|
94
|
+
# Name of a MANIFEST.MF template to use.
|
95
|
+
attr_accessor :manifest_file
|
96
|
+
|
97
|
+
# Files for WEB-INF directory (next to web.xml). Contains web.xml by default.
|
98
|
+
# If there are .erb files they will be processed with webxml config.
|
99
|
+
attr_accessor :webinf_files
|
100
|
+
|
101
|
+
# Use Bundler to locate gems if Gemfile is found. Default is true.
|
102
|
+
attr_accessor :bundler
|
103
|
+
|
104
|
+
# An array of Bundler groups to avoid including in the war file.
|
105
|
+
# Defaults to ["development", "test", "assets"].
|
106
|
+
attr_accessor :bundle_without
|
107
|
+
|
108
|
+
# Use JBundler to locate gems if Jarfile is found. Default is true.
|
109
|
+
attr_accessor :jbundler
|
110
|
+
|
111
|
+
# Path to the pre-bundled gem directory inside the war file. Default is '/WEB-INF/gems'.
|
112
|
+
# This also sets 'gem.path' inside web.xml.
|
113
|
+
attr_accessor :gem_path
|
114
|
+
|
115
|
+
# List of ruby files to compile to class files. Default is to
|
116
|
+
# compile all .rb files in the application.
|
117
|
+
attr_accessor :compiled_ruby_files
|
118
|
+
|
119
|
+
# Determines if ruby files in supporting gems will be compiled.
|
120
|
+
# Ignored unless compile feature is used.
|
121
|
+
attr_accessor :compile_gems
|
122
|
+
|
123
|
+
# Desired options passed to JRuby compiler if compiling to class files.
|
124
|
+
# Ignored unless compile feature is used.
|
125
|
+
attr_accessor :jrubyc_options
|
126
|
+
|
127
|
+
# Warbler writes an "init" file into the war at this location. JRuby-Rack and possibly other
|
128
|
+
# launchers may use this to initialize the Ruby environment.
|
129
|
+
attr_accessor :init_filename
|
130
|
+
|
131
|
+
# Array containing filenames or StringIO's to be concatenated together to form the init file.
|
132
|
+
# If the filename ends in .erb the file will be expanded the same way web.xml.erb is; see below.
|
133
|
+
attr_accessor :init_contents
|
134
|
+
|
135
|
+
# Override GEM_HOME environment variable at runtime. When false, gems in
|
136
|
+
# GEM_HOME will be loaded in preference to those packaged within the jar
|
137
|
+
# file. When true, only gems packaged in the jar file will be loaded.
|
138
|
+
# Defaults to true
|
139
|
+
attr_accessor :override_gem_home
|
140
|
+
|
141
|
+
# Explicit bytecode version for compiled ruby files. If given bytecode version is
|
142
|
+
# specified when ruby files are compiled using jrubyc
|
143
|
+
attr_accessor :bytecode_version
|
144
|
+
|
145
|
+
# Extra configuration for web.xml. Controls how the dynamically-generated web.xml
|
146
|
+
# file is generated.
|
147
|
+
#
|
148
|
+
# * <tt>webxml.jndi</tt> -- the name of one or more JNDI data sources name to be
|
149
|
+
# available to the application. Places appropriate <resource-ref> entries
|
150
|
+
# in the file.
|
151
|
+
# * <tt>webxml.ignored</tt> -- array of key names that will be not used to
|
152
|
+
# generate a context param. Defaults to ['jndi', 'booter']
|
153
|
+
#
|
154
|
+
# Any other key/value pair placed in the open structure will be dumped as a
|
155
|
+
# context parameter in the web.xml file. Some of the recognized values are:
|
156
|
+
#
|
157
|
+
# * <tt>webxml.rails.env</tt> -- the Rails environment to use for the
|
158
|
+
# running application, usually either development or production (the
|
159
|
+
# default).
|
160
|
+
# * <tt>webxml.gem.path</tt> -- the path to your bundled gem directory
|
161
|
+
# * <tt>webxml.jruby.min.runtimes</tt> -- minimum number of pooled runtimes to
|
162
|
+
# keep around during idle time
|
163
|
+
# * <tt>webxml.jruby.max.runtimes</tt> -- maximum number of pooled Rails
|
164
|
+
# application runtimes
|
165
|
+
#
|
166
|
+
# Note that if you attempt to access webxml configuration keys in a conditional,
|
167
|
+
# you might not obtain the result you want. For example:
|
168
|
+
# <%= webxml.maybe.present.key || 'default' %>
|
169
|
+
# doesn't yield the right result. Instead, you need to generate the context parameters:
|
170
|
+
# <%= webxml.context_params['maybe.present.key'] || 'default' %>
|
171
|
+
attr_accessor :webxml
|
172
|
+
|
173
|
+
# Embedded webserver to use. Currently supported webservers are:
|
174
|
+
# * <tt>jetty</tt> - Embedded Jetty from Eclipse
|
175
|
+
attr_accessor :webserver
|
176
|
+
|
177
|
+
# If set to true, Warbler will move jar files into the WEB-INF/lib directory of the
|
178
|
+
# created war file. This may be needed for some web servers. Defaults to false.
|
179
|
+
attr_accessor :move_jars_to_webinf_lib
|
180
|
+
|
181
|
+
# These file will be placed in the META-INF directory of the jar or war that warbler
|
182
|
+
# produces. They are primarily used as launchers by the runnable feature.
|
183
|
+
attr_accessor :script_files
|
184
|
+
|
185
|
+
attr_reader :warbler_templates
|
186
|
+
attr_reader :warbler_scripts
|
187
|
+
|
188
|
+
def initialize(warbler_home = WARBLER_HOME)
|
189
|
+
super()
|
190
|
+
|
191
|
+
@warbler_home = warbler_home
|
192
|
+
@warbler_templates = "#{WARBLER_HOME}/lib/warbler/templates"
|
193
|
+
@features = Set.new
|
194
|
+
@dirs = TOP_DIRS.select {|d| File.directory?(d)}
|
195
|
+
@includes = FileList['*file'] # [r/R]akefile gets included
|
196
|
+
@excludes = FileList[]
|
197
|
+
@java_libs = FileList[]
|
198
|
+
@java_classes = FileList[]
|
199
|
+
@gems = Warbler::Gems.new
|
200
|
+
@gem_dependencies = true
|
201
|
+
@gem_excludes = []
|
202
|
+
@exclude_logs = true
|
203
|
+
@public_html = FileList[]
|
204
|
+
@jar_name = File.basename(Dir.getwd)
|
205
|
+
@jar_extension = 'jar'
|
206
|
+
@webinf_files = FileList[]
|
207
|
+
@init_filename = 'META-INF/init.rb'
|
208
|
+
@init_contents = ["#{@warbler_templates}/config.erb"]
|
209
|
+
@override_gem_home = true
|
210
|
+
@script_files = []
|
211
|
+
@warbler_scripts = "#{WARBLER_HOME}/lib/warbler/scripts"
|
212
|
+
@move_jars_to_webinf_lib = false
|
213
|
+
@compile_gems = false
|
214
|
+
|
215
|
+
before_configure
|
216
|
+
yield self if block_given?
|
217
|
+
after_configure
|
218
|
+
|
219
|
+
@compiled_ruby_files ||= FileList[*@dirs.map {|d| "#{d}/**/*.rb"}]
|
220
|
+
|
221
|
+
@excludes += ["tmp/war", "tmp/war/**/*"] if File.directory?("tmp/war")
|
222
|
+
@excludes += ["tmp/cache/**/*"] if File.directory?("tmp/cache")
|
223
|
+
@excludes += warbler_vendor_excludes(warbler_home)
|
224
|
+
@excludes += FileList["**/*.log"] if @exclude_logs
|
225
|
+
end
|
226
|
+
|
227
|
+
def gems=(value)
|
228
|
+
@gems = Warbler::Gems.new(value)
|
229
|
+
end
|
230
|
+
|
231
|
+
def relative_gem_path
|
232
|
+
@gem_path[1..-1]
|
233
|
+
end
|
234
|
+
|
235
|
+
def define_tasks
|
236
|
+
task "gemjar" do
|
237
|
+
self.features << "gemjar"
|
238
|
+
end
|
239
|
+
task "executable" do
|
240
|
+
self.features << "executable"
|
241
|
+
end
|
242
|
+
task "runnable" do
|
243
|
+
self.features << "runnable"
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
alias_method :war_name, :jar_name
|
248
|
+
alias_method :war_name=, :jar_name=
|
249
|
+
|
250
|
+
private
|
251
|
+
def warbler_vendor_excludes(warbler_home)
|
252
|
+
warbler = File.expand_path(warbler_home)
|
253
|
+
if warbler =~ %r{^#{Dir.getwd}/(.*)}
|
254
|
+
FileList["#{$1}"]
|
255
|
+
else
|
256
|
+
[]
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
def dump
|
261
|
+
YAML::dump(self.dup.tap{|c| c.dump_traits })
|
262
|
+
end
|
263
|
+
public :dump
|
264
|
+
end
|
265
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2013 Michal Papis.
|
3
|
+
# This source code is available under the MIT license.
|
4
|
+
# See the file LICENSE.txt for details.
|
5
|
+
#++
|
6
|
+
|
7
|
+
module Warbler
|
8
|
+
module ExecutableHelper
|
9
|
+
def update_archive_add_executable(jar)
|
10
|
+
case executable
|
11
|
+
when Array
|
12
|
+
gem_name, executable_path = executable
|
13
|
+
gem_with_version = config.gems.full_name_for(gem_name, config.gem_dependencies)
|
14
|
+
bin_path = apply_pathmaps(config, File.join(gem_with_version, executable_path), :gems)
|
15
|
+
else
|
16
|
+
bin_path = apply_pathmaps(config, executable, :application)
|
17
|
+
end
|
18
|
+
add_main_rb(jar, bin_path, config.executable_params)
|
19
|
+
end
|
20
|
+
|
21
|
+
def executable
|
22
|
+
config.executable ||= default_executable
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/warbler/gems.rb
ADDED
@@ -0,0 +1,77 @@
|
|
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
|
+
# A set of gems. This only exists to allow expected operations
|
10
|
+
# to be used to add gems, and for backwards compatibility.
|
11
|
+
# It would be easier to just use a hash.
|
12
|
+
class Gems < Hash
|
13
|
+
ANY_VERSION = nil
|
14
|
+
private_constant :ANY_VERSION
|
15
|
+
|
16
|
+
def initialize(gems = nil)
|
17
|
+
if gems.is_a?(Hash)
|
18
|
+
self.merge!(gems)
|
19
|
+
elsif gems.is_a?(Array)
|
20
|
+
gems.each {|gem| self << gem }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def <<(gem)
|
25
|
+
@specs = nil
|
26
|
+
self[gem] ||= ANY_VERSION
|
27
|
+
end
|
28
|
+
|
29
|
+
def +(other)
|
30
|
+
@specs = nil
|
31
|
+
other.each {|g| self[g] ||= ANY_VERSION }
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
def -(other)
|
36
|
+
@specs = nil
|
37
|
+
other.each {|g| self.delete(g)}
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
41
|
+
def full_name_for(name, gem_dependencies)
|
42
|
+
gem_spec = specs(gem_dependencies).detect{ |spec| spec.name == name }
|
43
|
+
gem_spec.nil? ? name : gem_spec.full_name
|
44
|
+
end
|
45
|
+
|
46
|
+
def specs(gem_dependencies)
|
47
|
+
@specs ||= map { |gem, version| find_single_gem_files(gem_dependencies, gem, version) }.flatten.compact
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
# Add a single gem to WEB-INF/gems
|
53
|
+
def find_single_gem_files(gem_dependencies, gem_pattern, version = nil)
|
54
|
+
gem_spec_class = Gem::Specification
|
55
|
+
gem_spec_class = Gem::BasicSpecification if Gem.const_defined?(:BasicSpecification)
|
56
|
+
# Gem::Specification < Gem::BasicSpecification (since RGs 2.1)
|
57
|
+
case gem_pattern
|
58
|
+
when gem_spec_class
|
59
|
+
return BundlerHelper.to_spec(gem_pattern)
|
60
|
+
when Gem::Dependency
|
61
|
+
gem = gem_pattern
|
62
|
+
else
|
63
|
+
gem = Gem::Dependency.new(gem_pattern, Gem::Requirement.create(version))
|
64
|
+
end
|
65
|
+
# skip development dependencies
|
66
|
+
return nil if gem.respond_to?(:type) and gem.type != :runtime
|
67
|
+
|
68
|
+
# Deal with deprecated Gem.source_index and #search
|
69
|
+
matched = gem.respond_to?(:to_spec) ? [ gem.to_spec ] : Gem.source_index.search(gem)
|
70
|
+
fail "gem '#{gem}' not installed" if matched.empty?
|
71
|
+
spec = matched.last
|
72
|
+
return spec unless gem_dependencies
|
73
|
+
[spec] + spec.dependencies.map { |dependent_gem| find_single_gem_files(gem_dependencies, dependent_gem) }
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|