warbler 2.0.0.pre1 → 2.0.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +26 -5
- data/Gemfile +1 -1
- data/History.txt +4 -0
- data/Mavenfile +2 -1
- data/README.rdoc +53 -51
- data/Rakefile +13 -7
- data/ext/JarMain.java +58 -12
- data/ext/WarMain.java +9 -4
- data/ext/WarblerJar.java +12 -8
- data/lib/warbler/bundler_helper.rb +22 -0
- data/lib/warbler/gems.rb +9 -9
- data/lib/warbler/jar.rb +3 -1
- data/lib/warbler/traits/bundler.rb +7 -6
- data/lib/warbler/traits/gemspec.rb +22 -5
- data/lib/warbler/version.rb +1 -1
- data/lib/warbler/web_server.rb +12 -2
- data/lib/warbler.rb +1 -0
- data/lib/warbler_jar.jar +0 -0
- data/pom.xml +1 -1
- data/spec/spec_helper.rb +5 -0
- data/spec/warbler/bundler_spec.rb +10 -6
- data/spec/warbler/web_server_spec.rb +2 -2
- metadata +37 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60e9e20a37c15f1e428edab19a47965dbf9e0e5c
|
4
|
+
data.tar.gz: bf46d3626c310d7eb5ee69b5a4fb56b7aa59e59d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d87ad8be81920022dfb982775329e0988f918eec6a85f10f173319d469ee039baa50234056f8d499e5538f4d2091f2bbed80ad182dae5de895dfafc2d7732024
|
7
|
+
data.tar.gz: 787fc7fdd6f1bc683c33376d8de5731bc84ce50df92b647993ec1a7bfb67ae75a8ad5f74b78ff15ae8a7fd154337b71bdff0168e5215a5ec42733b113d96d43f
|
data/.travis.yml
CHANGED
@@ -1,17 +1,42 @@
|
|
1
|
+
sudo: false
|
2
|
+
language: ruby
|
3
|
+
script: bundle exec rake spec
|
1
4
|
rvm:
|
2
|
-
- jruby-9.0.0.0.
|
5
|
+
- jruby-9.0.0.0.pre2
|
3
6
|
jdk:
|
4
7
|
- oraclejdk8
|
5
8
|
branches:
|
6
9
|
only:
|
7
10
|
- master
|
8
11
|
- 2.x-dev
|
12
|
+
- /^test-.*/
|
13
|
+
before_install:
|
14
|
+
- ([ "$BUNDLER_VERSION" ] && gem uninstall bundler --all --force && gem install bundler -v "$BUNDLER_VERSION") || true
|
15
|
+
- bundle --version
|
16
|
+
before_script:
|
17
|
+
- export JRUBY_OPTS="$JRUBY_OPTS --server -Xcext.enabled=false -Xcompile.invokedynamic=false"
|
9
18
|
env:
|
10
19
|
- JRUBY_OPTS="--server -Xcompile.invokedynamic=false"
|
11
20
|
matrix:
|
12
21
|
include:
|
13
22
|
- rvm: jruby-head
|
14
23
|
env: JRUBY_OPTS="--server -Xcompile.invokedynamic=false"
|
24
|
+
matrix:
|
25
|
+
include:
|
26
|
+
- rvm: jruby-head
|
27
|
+
env: JRUBY_OPTS="" BUNDLER_VERSION="~> 1.9.9"
|
28
|
+
- rvm: jruby-1.7.20
|
29
|
+
env: JRUBY_OPTS="" BUNDLER_VERSION="~> 1.10.2"
|
30
|
+
- rvm: 1.8.7
|
31
|
+
env: BUNDLER_VERSION="~> 1.6.9"
|
32
|
+
- rvm: 1.9.2
|
33
|
+
env: BUNDLER_VERSION="~> 1.7.9"
|
34
|
+
- rvm: 1.9.3
|
35
|
+
env: BUNDLER_VERSION="~> 1.8.9"
|
36
|
+
- rvm: jruby
|
37
|
+
env: MAVEN_OPTS="-XX:MaxPermSize=128m"
|
38
|
+
script: mvn clean verify
|
39
|
+
>>>>>>> master
|
15
40
|
allow_failures:
|
16
41
|
- rvm: jruby-head
|
17
42
|
notifications:
|
@@ -22,7 +47,3 @@ notifications:
|
|
22
47
|
on_failure: always
|
23
48
|
template:
|
24
49
|
- "%{repository} (%{branch}:%{commit} by %{author}): %{message} (%{build_url})"
|
25
|
-
before_install:
|
26
|
-
- sudo apt-get update && sudo apt-get install git
|
27
|
-
- git fetch --unshallow
|
28
|
-
- gem install bundler --pre
|
data/Gemfile
CHANGED
data/History.txt
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
== 2x-dev
|
2
2
|
|
3
|
+
== 1.4.9
|
4
|
+
|
5
|
+
- Fixed a bug in detecting default PORT for executable WAR
|
6
|
+
- #332: Warbler not picking up new Bundler convention of 'exe' directory for executables
|
3
7
|
|
4
8
|
- Added the ability to set custom port for Jetty launcher with
|
5
9
|
warbler.port or PORT env var
|
data/Mavenfile
CHANGED
@@ -7,7 +7,8 @@ gemspec( :jar => 'warbler_jar.jar',
|
|
7
7
|
|
8
8
|
# just dump the POM as pom.xml as read-only file
|
9
9
|
properties( 'tesla.dump.pom' => 'pom.xml',
|
10
|
-
'tesla.dump.readOnly' => true
|
10
|
+
'tesla.dump.readOnly' => true,
|
11
|
+
'jruby.plugins.version' => '1.0.10' )
|
11
12
|
|
12
13
|
# dependencies needed for compilation
|
13
14
|
scope :provided do
|
data/README.rdoc
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
= Warbler {<img src="https://badge.fury.io/rb/warbler.svg" alt="Gem Version" />}[http://badge.fury.io/rb/warbler] {<img src="https://travis-ci.org/jruby/warbler.png" />}[https://travis-ci.org/jruby/warbler]
|
2
2
|
|
3
|
-
Warbler is a gem to make a Java jar or war file out of any Ruby, Rails or Rack
|
4
|
-
application. Warbler provides a minimal, flexible, Ruby-like way to bundle up
|
3
|
+
Warbler is a gem to make a Java jar or war file out of any Ruby, Rails or Rack
|
4
|
+
application. Warbler provides a minimal, flexible, Ruby-like way to bundle up
|
5
5
|
all of your application files for deployment to a Java environment.
|
6
6
|
|
7
7
|
Warbler provides a sane set of out-of-the box defaults that should allow most
|
@@ -18,7 +18,7 @@ Version 1.4.x of Warbler supports versions of JRuby up to 1.7.x. The {2.x-dev br
|
|
18
18
|
3. Choose one:
|
19
19
|
|
20
20
|
* For a web project, deploy your +myapp.war+ file to your favorite Java application server.
|
21
|
-
|
21
|
+
|
22
22
|
* For a standalone applications, just run it: <tt>java -jar myapp.jar</tt>.
|
23
23
|
|
24
24
|
== Usage
|
@@ -43,9 +43,9 @@ Type <tt>warble</tt> to create the jar or war file.
|
|
43
43
|
|
44
44
|
== Features
|
45
45
|
|
46
|
-
Warbler "features" are small Rake tasks that run before the creation of the war
|
47
|
-
file and make manipulations to the archive structure. For instance, the
|
48
|
-
+executable+ feature makes your war file capable of running on its own,
|
46
|
+
Warbler "features" are small Rake tasks that run before the creation of the war
|
47
|
+
file and make manipulations to the archive structure. For instance, the
|
48
|
+
+executable+ feature makes your war file capable of running on its own,
|
49
49
|
without a servlet container (using an embedded web server) :
|
50
50
|
|
51
51
|
warble executable war
|
@@ -64,73 +64,73 @@ Currently, the following features are available :
|
|
64
64
|
number of files in the .war. This is mostly useful for Google
|
65
65
|
AppEngine where the number of files per application has a limit.
|
66
66
|
(Note: not applicable for jar-based applications.)
|
67
|
-
* +runnable+: This makes a (standard Java) runnable .war archive thus you can
|
68
|
-
execute binary bundled (gem) commands e.g. "rake". You should use the -S
|
69
|
-
switch to specify the binary followed by any arguments in takes e.g.
|
67
|
+
* +runnable+: This makes a (standard Java) runnable .war archive thus you can
|
68
|
+
execute binary bundled (gem) commands e.g. "rake". You should use the -S
|
69
|
+
switch to specify the binary followed by any arguments in takes e.g.
|
70
70
|
<tt>java -jar myrailsapp.war -S rake db:migrate</tt>.
|
71
|
-
* +executable+: This bundles an embedded web server into the .war so that it
|
72
|
-
can either be deployed into a traditional java web server or run as a
|
71
|
+
* +executable+: This bundles an embedded web server into the .war so that it
|
72
|
+
can either be deployed into a traditional java web server or run as a
|
73
73
|
standalone application using <tt>java -jar myapp.war</tt>.
|
74
74
|
(Note: jar-based applications are executable by default.)
|
75
75
|
* +compiled+: This uses +jrubyc+ to precompile all .rb files in your application
|
76
|
-
to .class files and includes those in the .war instead of the Ruby sources.
|
77
|
-
NOTE: The war file will still contain .rb files, but they will be short stubs
|
76
|
+
to .class files and includes those in the .war instead of the Ruby sources.
|
77
|
+
NOTE: The war file will still contain .rb files, but they will be short stubs
|
78
78
|
containing the following code : <tt>load __FILE__.sub(/\.rb$/, '.class')</tt>
|
79
79
|
|
80
|
-
Features may form the basis for a third-party plugin system (in the future)
|
80
|
+
Features may form the basis for a third-party plugin system (in the future)
|
81
81
|
if there is demand.
|
82
82
|
|
83
|
-
NOTE: Feature tasks must be included in the same command invocation and
|
84
|
-
inserted before the +war+ task in order to take effect. For example,
|
85
|
-
<tt>warble compiled; warble war</tt> does not compile and obfuscate +.rb+
|
86
|
-
sources because the second invocation of +warble+ does not run the +compiled+
|
83
|
+
NOTE: Feature tasks must be included in the same command invocation and
|
84
|
+
inserted before the +war+ task in order to take effect. For example,
|
85
|
+
<tt>warble compiled; warble war</tt> does not compile and obfuscate +.rb+
|
86
|
+
sources because the second invocation of +warble+ does not run the +compiled+
|
87
87
|
feature and creates a basic war with the sources included, make sure you run :
|
88
88
|
|
89
89
|
warble compiled war
|
90
90
|
|
91
|
-
or, if it's important that the war always be compiled, use the option above to
|
91
|
+
or, if it's important that the war always be compiled, use the option above to
|
92
92
|
put the feature in your <tt>config/warble.rb</tt>.
|
93
93
|
|
94
94
|
== War or Jar?
|
95
95
|
|
96
|
-
War-based projects are for Rails, Merb, or Rack-based web applications.
|
97
|
-
They usually contain a +config/environment.rb+ file, a +config/init.rb+ file,
|
96
|
+
War-based projects are for Rails, Merb, or Rack-based web applications.
|
97
|
+
They usually contain a +config/environment.rb+ file, a +config/init.rb+ file,
|
98
98
|
or a +config.ru+ file.
|
99
|
-
The presence of these files are used to determine if the project is a web
|
99
|
+
The presence of these files are used to determine if the project is a web
|
100
100
|
application, and thus a Java EE compatible war file is built for the project.
|
101
101
|
|
102
|
-
Jar-based projects are for standalone Ruby applications. Usually a Ruby
|
103
|
-
application has a launcher script in the +bin+ directory and Ruby code
|
104
|
-
in the <tt>lib</tt> directory. Warbler packages the application so that
|
102
|
+
Jar-based projects are for standalone Ruby applications. Usually a Ruby
|
103
|
+
application has a launcher script in the +bin+ directory and Ruby code
|
104
|
+
in the <tt>lib</tt> directory. Warbler packages the application so that
|
105
105
|
<tt>java -jar myapp.jar</tt> runs the launcher script.
|
106
106
|
|
107
107
|
== Jar Files
|
108
108
|
|
109
109
|
=== Gem Specification (gemspec) Files
|
110
110
|
|
111
|
-
If your project has a <tt>.gemspec</tt> file in the top directory, it will be
|
112
|
-
used to configure the project's dependencies, launcher script, require paths,
|
113
|
-
and the files to be included in the archive. For best results make sure your
|
111
|
+
If your project has a <tt>.gemspec</tt> file in the top directory, it will be
|
112
|
+
used to configure the project's dependencies, launcher script, require paths,
|
113
|
+
and the files to be included in the archive. For best results make sure your
|
114
114
|
gemspec specifies all of the following attributes:
|
115
115
|
|
116
116
|
* +executables+
|
117
117
|
* +require_paths+
|
118
118
|
* runtime dependencies added with +add_dependency+
|
119
119
|
|
120
|
-
If your project do not have a <tt>.gemspec</tt>, Warbler will attempt to guess
|
121
|
-
the launcher from the contents of the <tt>bin</tt> directory and use the
|
122
|
-
<tt>lib</tt> directory as the lone require path. All files in the project
|
120
|
+
If your project do not have a <tt>.gemspec</tt>, Warbler will attempt to guess
|
121
|
+
the launcher from the contents of the <tt>bin</tt> directory and use the
|
122
|
+
<tt>lib</tt> directory as the lone require path. All files in the project
|
123
123
|
will be included in the archive.
|
124
124
|
|
125
125
|
=== Bundler
|
126
126
|
|
127
|
-
Applications that use Bundler[http://gembundler.com/], detected via presence of
|
128
|
-
a +Gemfile+, will have the gems packaged up into the archive along with the
|
129
|
-
Gemfile. The Bundler groups named ":development", ":test" and ":assets" will be
|
130
|
-
excluded by default, unless you specify with <tt>config.bundle_without</tt> in
|
127
|
+
Applications that use Bundler[http://gembundler.com/], detected via presence of
|
128
|
+
a +Gemfile+, will have the gems packaged up into the archive along with the
|
129
|
+
Gemfile. The Bundler groups named ":development", ":test" and ":assets" will be
|
130
|
+
excluded by default, unless you specify with <tt>config.bundle_without</tt> in
|
131
131
|
+config/warble.rb+.
|
132
132
|
|
133
|
-
Warbler supports Bundler for gems and git repositories, but not for plain path
|
133
|
+
Warbler supports Bundler for gems and git repositories, but not for plain path
|
134
134
|
components. Warbler will warn when a +:path+ component is found in the +Gemfile+
|
135
135
|
and will refuse to include it in the archive.
|
136
136
|
|
@@ -146,18 +146,18 @@ via presence of a +Jarfile+, will have the jars packaged up into the archive. th
|
|
146
146
|
Rails applications are detected automatically and configured appropriately.
|
147
147
|
The following items are set up for you:
|
148
148
|
|
149
|
-
* Your application runs in the +production+ environment by default.
|
149
|
+
* Your application runs in the +production+ environment by default.
|
150
150
|
Change it in +config/warble.rb+ (see below).
|
151
151
|
* The Rails gem is packaged if you haven't vendored Rails (Rails <= 2.x).
|
152
152
|
* Other gems configured in Rails.configuration.gems are packaged (2.1 - 2.3)
|
153
|
-
* Multi-thread-safe execution (as introduced in Rails 2.2) is detected and
|
153
|
+
* Multi-thread-safe execution (as introduced in Rails 2.2) is detected and
|
154
154
|
runtime pooling is disabled.
|
155
155
|
|
156
156
|
=== Other Rack-based applications
|
157
157
|
|
158
|
-
If you have a +config.ru+ file in the top directory or one of the immediate
|
159
|
-
subdirectories of your application, it will be included and used as the rackup
|
160
|
-
script for your Rack-based application. You will probably need to specify
|
158
|
+
If you have a +config.ru+ file in the top directory or one of the immediate
|
159
|
+
subdirectories of your application, it will be included and used as the rackup
|
160
|
+
script for your Rack-based application. You will probably need to specify
|
161
161
|
framework and application gems in +config/warble.rb+ unless you're using Bundler
|
162
162
|
to manage your gems. <tt>ENV['RACK_ENV']</tt> will be set to +production+.
|
163
163
|
|
@@ -166,13 +166,13 @@ of how to configure Warbler to package Camping and Sinatra apps.
|
|
166
166
|
|
167
167
|
=== Configuration auto-detect notes
|
168
168
|
|
169
|
-
* Warbler will load the +environment+ Rake task in a Rails application to try
|
170
|
-
to detect some configuration. If you don't have database access in the
|
171
|
-
environment where you package your application, you may wish to set
|
172
|
-
<tt>Warbler.framework_detection = false</tt> at the top of +config.rb+.
|
173
|
-
In this case you may need to specify additional details such as booter, gems
|
169
|
+
* Warbler will load the +environment+ Rake task in a Rails application to try
|
170
|
+
to detect some configuration. If you don't have database access in the
|
171
|
+
environment where you package your application, you may wish to set
|
172
|
+
<tt>Warbler.framework_detection = false</tt> at the top of +config.rb+.
|
173
|
+
In this case you may need to specify additional details such as booter, gems
|
174
174
|
and other settings that would normally be gleaned from the app configuration.
|
175
|
-
* Is it possible to more generally detect what gems an application uses?
|
175
|
+
* Is it possible to more generally detect what gems an application uses?
|
176
176
|
<tt>Gem.loaded_specs</tt> is available, but the application needs to be
|
177
177
|
loaded first before its contents are reliable.
|
178
178
|
|
@@ -185,7 +185,7 @@ doing this. With the gem, simply run
|
|
185
185
|
|
186
186
|
warble config
|
187
187
|
|
188
|
-
Finally, edit the +config/warble.rb+ to your taste. The generated file is
|
188
|
+
Finally, edit the +config/warble.rb+ to your taste. The generated file is
|
189
189
|
fully-documented with the available options and default values.
|
190
190
|
|
191
191
|
=== War layout
|
@@ -244,7 +244,7 @@ lock the <tt>rubyzip</tt> gem to a version before 1.0.0.
|
|
244
244
|
|
245
245
|
== Troubleshooting
|
246
246
|
|
247
|
-
If Warbler isn't packaging the files you were expecting, use the +war:debug+
|
247
|
+
If Warbler isn't packaging the files you were expecting, use the +war:debug+
|
248
248
|
task to give you more insight into what's going on.
|
249
249
|
|
250
250
|
If you think you found a bug, please file one at
|
@@ -262,7 +262,7 @@ https://github.com/jruby/warbler/tarball/master.
|
|
262
262
|
|
263
263
|
== Development
|
264
264
|
|
265
|
-
You can develop Warbler with any implementation of Ruby. To write Warbler code
|
265
|
+
You can develop Warbler with any implementation of Ruby. To write Warbler code
|
266
266
|
and run specs, you need to have Bundler installed and run <tt>bundle</tt> once.
|
267
267
|
|
268
268
|
After that, simply run <tt>rake</tt>.
|
@@ -284,6 +284,8 @@ http://maven.apache.org/ Be aware the homebrew installs 3.0.5, which doesn't wor
|
|
284
284
|
|
285
285
|
Warbler is provided under the terms of the MIT license.
|
286
286
|
|
287
|
-
Warbler (c)
|
287
|
+
Warbler (c) 2013-2015 The JRuby project
|
288
|
+
|
289
|
+
Warbler (c) 2010-2012 Engine Yard, Inc.
|
288
290
|
|
289
291
|
Warbler (c) 2007-2009 Sun Microsystems, Inc.
|
data/Rakefile
CHANGED
@@ -6,15 +6,15 @@
|
|
6
6
|
# See the file LICENSE.txt for details.
|
7
7
|
#++
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
begin
|
10
|
+
require 'bundler'
|
11
|
+
rescue LoadError
|
12
|
+
warn "\nPlease `gem install bundler' and run `bundle install' to ensure you have all dependencies.\n\n"
|
13
|
+
else
|
14
|
+
require 'bundler/gem_helper'
|
15
|
+
Bundler::GemHelper.install_tasks :dir => File.dirname(__FILE__)
|
11
16
|
end
|
12
17
|
|
13
|
-
require 'bundler/gem_helper'
|
14
|
-
gem_helper = Bundler::GemHelper.new(File.dirname(__FILE__))
|
15
|
-
gem_helper.install
|
16
|
-
gemspec = gem_helper.gemspec
|
17
|
-
|
18
18
|
require 'rake/clean'
|
19
19
|
CLEAN << "pkg" << "doc" << Dir['integration/**/target']
|
20
20
|
|
@@ -42,8 +42,13 @@ end
|
|
42
42
|
# the jar tasks is part of maven-tasks
|
43
43
|
task :build => :jar
|
44
44
|
|
45
|
+
load_gemspec = lambda do
|
46
|
+
Gem::Specification.load(File.expand_path('warbler.gemspec', File.dirname(__FILE__)))
|
47
|
+
end
|
48
|
+
|
45
49
|
require 'rdoc/task'
|
46
50
|
RDoc::Task.new(:docs) do |rd|
|
51
|
+
gemspec = load_gemspec.call
|
47
52
|
rd.rdoc_dir = "doc"
|
48
53
|
rd.rdoc_files.include("README.rdoc", "History.txt", "LICENSE.txt")
|
49
54
|
rd.rdoc_files += gemspec.require_paths
|
@@ -54,6 +59,7 @@ end
|
|
54
59
|
task :release_docs => :docs do
|
55
60
|
config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml"))) rescue nil
|
56
61
|
if config
|
62
|
+
gemspec = load_gemspec.call
|
57
63
|
dir = "/var/www/gforge-projects/#{gemspec.rubyforge_project}/#{gemspec.name}"
|
58
64
|
dest = "#{config["username"]}@rubyforge.org:#{dir}"
|
59
65
|
sh %{rsync -rl --delete doc/ #{dest}}
|
data/ext/JarMain.java
CHANGED
@@ -28,8 +28,6 @@ public class JarMain implements Runnable {
|
|
28
28
|
|
29
29
|
static final String MAIN = "/" + JarMain.class.getName().replace('.', '/') + ".class";
|
30
30
|
|
31
|
-
final boolean debug = isDebug();
|
32
|
-
|
33
31
|
protected final String[] args;
|
34
32
|
protected final String archive;
|
35
33
|
private final String path;
|
@@ -126,7 +124,7 @@ public class JarMain implements Runnable {
|
|
126
124
|
}
|
127
125
|
|
128
126
|
protected Object newScriptingContainer(final URL[] jars) throws Exception {
|
129
|
-
|
127
|
+
setSystemProperty("org.jruby.embed.class.path", "");
|
130
128
|
classLoader = new URLClassLoader(jars);
|
131
129
|
Class scriptingContainerClass = Class.forName("org.jruby.embed.ScriptingContainer", true, classLoader);
|
132
130
|
Object scriptingContainer = scriptingContainerClass.newInstance();
|
@@ -164,12 +162,12 @@ public class JarMain implements Runnable {
|
|
164
162
|
}
|
165
163
|
|
166
164
|
protected void debug(String msg, Throwable t) {
|
167
|
-
if (
|
168
|
-
if (
|
165
|
+
if ( isDebug() ) System.out.println(msg);
|
166
|
+
if ( isDebug() && t != null ) t.printStackTrace(System.out);
|
169
167
|
}
|
170
168
|
|
171
169
|
protected static void debug(Throwable t) {
|
172
|
-
if (isDebug()) t.printStackTrace(System.out);
|
170
|
+
if ( isDebug() ) t.printStackTrace(System.out);
|
173
171
|
}
|
174
172
|
|
175
173
|
protected void warn(String msg) {
|
@@ -225,9 +223,9 @@ public class JarMain implements Runnable {
|
|
225
223
|
}
|
226
224
|
|
227
225
|
protected static void doStart(final JarMain main) {
|
226
|
+
int exit;
|
228
227
|
try {
|
229
|
-
|
230
|
-
if (isSystemExitEnabled()) System.exit(exit);
|
228
|
+
exit = main.start();
|
231
229
|
}
|
232
230
|
catch (Exception e) {
|
233
231
|
Throwable t = e;
|
@@ -235,7 +233,13 @@ public class JarMain implements Runnable {
|
|
235
233
|
t = t.getCause();
|
236
234
|
}
|
237
235
|
error(e.toString(), t);
|
238
|
-
|
236
|
+
exit = 1;
|
237
|
+
}
|
238
|
+
try {
|
239
|
+
if ( isSystemExitEnabled() ) System.exit(exit);
|
240
|
+
}
|
241
|
+
catch (SecurityException e) {
|
242
|
+
debug(e);
|
239
243
|
}
|
240
244
|
}
|
241
245
|
|
@@ -262,17 +266,59 @@ public class JarMain implements Runnable {
|
|
262
266
|
}
|
263
267
|
}
|
264
268
|
|
265
|
-
static boolean
|
266
|
-
|
269
|
+
private static final boolean debug;
|
270
|
+
static {
|
271
|
+
debug = Boolean.parseBoolean( getSystemProperty("warbler.debug", "false") );
|
267
272
|
}
|
268
273
|
|
274
|
+
static boolean isDebug() { return debug; }
|
275
|
+
|
269
276
|
/**
|
270
277
|
* if warbler.skip_system_exit system property is defined, we will not
|
271
278
|
* call System.exit in the normal flow. System.exit can cause problems
|
272
279
|
* for wrappers like procrun
|
273
280
|
*/
|
274
281
|
private static boolean isSystemExitEnabled(){
|
275
|
-
return
|
282
|
+
return getSystemProperty("warbler.skip_system_exit") == null; //omission enables System.exit use
|
283
|
+
}
|
284
|
+
|
285
|
+
static String getSystemProperty(final String name) {
|
286
|
+
return getSystemProperty(name, null);
|
287
|
+
}
|
288
|
+
|
289
|
+
static String getSystemProperty(final String name, final String defaultValue) {
|
290
|
+
try {
|
291
|
+
return System.getProperty(name, defaultValue);
|
292
|
+
}
|
293
|
+
catch (SecurityException e) {
|
294
|
+
return defaultValue;
|
295
|
+
}
|
296
|
+
}
|
297
|
+
|
298
|
+
static boolean setSystemProperty(final String name, final String value) {
|
299
|
+
try {
|
300
|
+
System.setProperty(name, value);
|
301
|
+
return true;
|
302
|
+
}
|
303
|
+
catch (SecurityException e) {
|
304
|
+
return false;
|
305
|
+
}
|
306
|
+
}
|
307
|
+
|
308
|
+
static String getENV(final String name) {
|
309
|
+
return getENV(name, null);
|
310
|
+
}
|
311
|
+
|
312
|
+
static String getENV(final String name, final String defaultValue) {
|
313
|
+
try {
|
314
|
+
if ( System.getenv().containsKey(name) ) {
|
315
|
+
return System.getenv().get(name);
|
316
|
+
}
|
317
|
+
return defaultValue;
|
318
|
+
}
|
319
|
+
catch (SecurityException e) {
|
320
|
+
return defaultValue;
|
321
|
+
}
|
276
322
|
}
|
277
323
|
|
278
324
|
}
|
data/ext/WarMain.java
CHANGED
@@ -64,6 +64,7 @@ public class WarMain extends JarMain {
|
|
64
64
|
static final String MAIN = "/" + WarMain.class.getName().replace('.', '/') + ".class";
|
65
65
|
static final String WEBSERVER_PROPERTIES = "/WEB-INF/webserver.properties";
|
66
66
|
static final String WEBSERVER_JAR = "/WEB-INF/webserver.jar";
|
67
|
+
static final String WEBSERVER_CONFIG = "/WEB-INF/webserver.xml";
|
67
68
|
|
68
69
|
/**
|
69
70
|
* jruby arguments, consider the following command :
|
@@ -140,20 +141,24 @@ public class WarMain extends JarMain {
|
|
140
141
|
if ( is != null ) props.load(is);
|
141
142
|
} catch (Exception e) { }
|
142
143
|
|
143
|
-
String port =
|
144
|
+
String port = getSystemProperty("warbler.port", getENV("PORT"));
|
144
145
|
port = port == null ? "8080" : port;
|
145
|
-
|
146
|
+
String webserverConfig = getSystemProperty("warbler.webserver_config", getENV("WARBLER_WEBSERVER_CONFIG"));
|
147
|
+
String embeddedWebserverConfig = new URI("jar", entryPath(WEBSERVER_CONFIG), null).toURL().toString();
|
148
|
+
webserverConfig = webserverConfig == null ? embeddedWebserverConfig : webserverConfig;
|
149
|
+
for ( Map.Entry entry : props.entrySet() ) {
|
146
150
|
String val = (String) entry.getValue();
|
147
151
|
val = val.replace("{{warfile}}", archive).
|
148
152
|
replace("{{port}}", port).
|
153
|
+
replace("{{config}}", webserverConfig).
|
149
154
|
replace("{{webroot}}", webroot.getAbsolutePath());
|
150
155
|
entry.setValue(val);
|
151
156
|
}
|
152
157
|
|
153
158
|
if (props.getProperty("props") != null) {
|
154
159
|
String[] propsToSet = props.getProperty("props").split(",");
|
155
|
-
for (String key : propsToSet) {
|
156
|
-
|
160
|
+
for ( String key : propsToSet ) {
|
161
|
+
setSystemProperty(key, props.getProperty(key));
|
157
162
|
}
|
158
163
|
}
|
159
164
|
|
data/ext/WarblerJar.java
CHANGED
@@ -118,16 +118,20 @@ public class WarblerJar {
|
|
118
118
|
path = value.convertToString().getUnicodeValue();
|
119
119
|
}
|
120
120
|
|
121
|
-
InputStream inFile = getStream(path, null);
|
122
121
|
try {
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
122
|
+
InputStream inFile = getStream(path, null);
|
123
|
+
try {
|
124
|
+
zip.putNextEntry(new ZipEntry(entryName));
|
125
|
+
byte[] buf = new byte[16384];
|
126
|
+
int bytesRead;
|
127
|
+
while ((bytesRead = inFile.read(buf)) != -1) {
|
128
|
+
zip.write(buf, 0, bytesRead);
|
129
|
+
}
|
130
|
+
} finally {
|
131
|
+
close(inFile);
|
128
132
|
}
|
129
|
-
}
|
130
|
-
|
133
|
+
} catch (IOException e) {
|
134
|
+
System.err.println("File not found; " + path + " not in archive");
|
131
135
|
}
|
132
136
|
}
|
133
137
|
}
|
@@ -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
|
+
|
data/lib/warbler/gems.rb
CHANGED
@@ -43,16 +43,19 @@ module Warbler
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def specs(gem_dependencies)
|
46
|
-
@specs ||= map{|gem, version| find_single_gem_files(gem_dependencies, gem, version) }.flatten.compact
|
46
|
+
@specs ||= map { |gem, version| find_single_gem_files(gem_dependencies, gem, version) }.flatten.compact
|
47
47
|
end
|
48
48
|
|
49
49
|
private
|
50
50
|
|
51
51
|
# Add a single gem to WEB-INF/gems
|
52
52
|
def find_single_gem_files(gem_dependencies, gem_pattern, version = nil)
|
53
|
+
gem_spec_class = Gem::Specification
|
54
|
+
gem_spec_class = Gem::BasicSpecification if Gem.const_defined?(:BasicSpecification)
|
55
|
+
# Gem::Specification < Gem::BasicSpecification (since RGs 2.1)
|
53
56
|
case gem_pattern
|
54
|
-
when
|
55
|
-
return gem_pattern
|
57
|
+
when gem_spec_class
|
58
|
+
return BundlerHelper.to_spec(gem_pattern)
|
56
59
|
when Gem::Dependency
|
57
60
|
gem = gem_pattern
|
58
61
|
else
|
@@ -62,14 +65,11 @@ module Warbler
|
|
62
65
|
return nil if gem.respond_to?(:type) and gem.type != :runtime
|
63
66
|
|
64
67
|
# Deal with deprecated Gem.source_index and #search
|
65
|
-
matched = gem.respond_to?(:to_spec) ? [gem.to_spec] : Gem.source_index.search(gem)
|
68
|
+
matched = gem.respond_to?(:to_spec) ? [ gem.to_spec ] : Gem.source_index.search(gem)
|
66
69
|
fail "gem '#{gem}' not installed" if matched.empty?
|
67
70
|
spec = matched.last
|
68
|
-
|
69
|
-
|
70
|
-
else
|
71
|
-
spec
|
72
|
-
end
|
71
|
+
return spec unless gem_dependencies
|
72
|
+
[spec] + spec.dependencies.map { |gem| find_single_gem_files(gem_dependencies, gem) }
|
73
73
|
end
|
74
74
|
|
75
75
|
end
|
data/lib/warbler/jar.rb
CHANGED
@@ -290,8 +290,10 @@ module Warbler
|
|
290
290
|
zipfile.mkdir(entry.dup) # in case it's frozen rubyzip 0.9.6.1 workaround
|
291
291
|
elsif File.symlink?(src)
|
292
292
|
zipfile.get_output_stream(entry) { |f| f << File.read(src) }
|
293
|
-
|
293
|
+
elsif File.exist?(src)
|
294
294
|
zipfile.add(entry, src)
|
295
|
+
else
|
296
|
+
$stderr.puts "File not found; #{entry.inspect} not in archive"
|
295
297
|
end
|
296
298
|
end
|
297
299
|
end
|
@@ -12,6 +12,7 @@ module Warbler
|
|
12
12
|
class Bundler
|
13
13
|
include Trait
|
14
14
|
include PathmapHelper
|
15
|
+
include BundlerHelper
|
15
16
|
|
16
17
|
def self.detect?
|
17
18
|
File.exist?(ENV['BUNDLE_GEMFILE'] || "Gemfile")
|
@@ -37,15 +38,15 @@ module Warbler
|
|
37
38
|
config.bundler = {}
|
38
39
|
|
39
40
|
bundler_specs.each do |spec|
|
41
|
+
spec = to_spec(spec)
|
40
42
|
# Bundler HAX -- fixup bad #loaded_from attribute in fake
|
41
43
|
# bundler gemspec from bundler/source.rb
|
42
|
-
if spec.name ==
|
44
|
+
if spec.name == 'bundler'
|
43
45
|
full_gem_path = Pathname.new(spec.full_gem_path)
|
44
|
-
|
45
|
-
while !full_gem_path.join('bundler.gemspec').exist?
|
46
|
+
while ! full_gem_path.join('bundler.gemspec').exist?
|
46
47
|
full_gem_path = full_gem_path.dirname
|
47
48
|
# if at top of the path, meaning we cannot find bundler.gemspec, abort.
|
48
|
-
if full_gem_path.to_s
|
49
|
+
if full_gem_path.to_s =~ /^[\.\/]$/
|
49
50
|
$stderr.puts("warning: Unable to detect bundler spec under '#{spec.full_gem_path}'' and is sub-dirs")
|
50
51
|
exit
|
51
52
|
end
|
@@ -139,8 +140,8 @@ module Warbler
|
|
139
140
|
definition = ::Bundler.definition
|
140
141
|
all = definition.specs.to_a
|
141
142
|
requested = definition.specs_for(definition.groups - bundle_without).to_a
|
142
|
-
excluded_git_specs = (all - requested).select {|spec| ::Bundler::Source::Git === spec.source }
|
143
|
-
excluded_git_specs.each {|spec| spec.groups << :warbler_excluded }
|
143
|
+
excluded_git_specs = (all - requested).select { |spec| ::Bundler::Source::Git === spec.source }
|
144
|
+
excluded_git_specs.each { |spec| spec.groups << :warbler_excluded }
|
144
145
|
requested + excluded_git_specs
|
145
146
|
end
|
146
147
|
|
@@ -55,15 +55,32 @@ module Warbler
|
|
55
55
|
|
56
56
|
def default_executable
|
57
57
|
if !@spec.executables.empty?
|
58
|
-
|
58
|
+
bundler_version =
|
59
|
+
Gem.loaded_specs.include?("bundler") ?
|
60
|
+
Gem.loaded_specs["bundler"].version :
|
61
|
+
Gem::Version.create("0.0.0")
|
62
|
+
if (bundler_version <=> Gem::Version.create("1.8.0")) < 0
|
63
|
+
"bin/#{@spec.executables.first}"
|
64
|
+
else
|
65
|
+
exe_script = @spec.executables.first
|
66
|
+
if File.exists?("exe/#{exe_script}")
|
67
|
+
"exe/#{exe_script}"
|
68
|
+
elsif File.exists?("bin/#{exe_script}")
|
69
|
+
"bin/#{exe_script}"
|
70
|
+
else
|
71
|
+
raise "No `#{exe_script}` executable script found"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
elsif exe = Dir['bin/*'].sort.first
|
75
|
+
warn "No default executable found in #{@spec_file}, using bin/#{exe}"
|
76
|
+
exe
|
77
|
+
elsif exe = Dir['exe/*'].sort.first
|
78
|
+
warn "No default executable found in #{@spec_file}, using exe/#{exe}"
|
79
|
+
exe
|
59
80
|
else
|
60
|
-
exe = Dir['bin/*'].sort.first
|
61
81
|
raise "No executable script found" unless exe
|
62
|
-
warn "No default executable found in #{@spec_file}, using #{exe}"
|
63
|
-
exe
|
64
82
|
end
|
65
83
|
end
|
66
|
-
|
67
84
|
end
|
68
85
|
end
|
69
86
|
end
|
data/lib/warbler/version.rb
CHANGED
data/lib/warbler/web_server.rb
CHANGED
@@ -122,13 +122,23 @@ PROPS
|
|
122
122
|
|
123
123
|
def add(jar)
|
124
124
|
super
|
125
|
+
jar.files["WEB-INF/webserver.xml"] ||= StringIO.new(<<-CONFIG)
|
126
|
+
<?xml version="1.0"?>
|
127
|
+
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
|
128
|
+
|
129
|
+
<Configure id="Server" class="org.eclipse.jetty.server.Server">
|
130
|
+
</Configure>
|
131
|
+
CONFIG
|
132
|
+
|
125
133
|
jar.files["WEB-INF/webserver.properties"] = StringIO.new(<<-PROPS)
|
126
134
|
mainclass = org.eclipse.jetty.runner.Runner
|
127
|
-
args = args0,args1,args2
|
135
|
+
args = args0,args1,args2,args3,args4
|
128
136
|
props = jetty.home
|
129
137
|
args0 = --port
|
130
138
|
args1 = {{port}}
|
131
|
-
args2 =
|
139
|
+
args2 = --config
|
140
|
+
args3 = {{config}}
|
141
|
+
args4 = {{warfile}}
|
132
142
|
jetty.home = {{webroot}}
|
133
143
|
PROPS
|
134
144
|
end
|
data/lib/warbler.rb
CHANGED
@@ -34,6 +34,7 @@ require 'warbler/executable_helper'
|
|
34
34
|
require 'warbler/rake_helper'
|
35
35
|
require 'warbler/pathmap_helper'
|
36
36
|
require 'warbler/platform_helper'
|
37
|
+
require 'warbler/bundler_helper'
|
37
38
|
require 'warbler/task'
|
38
39
|
require 'warbler/application'
|
39
40
|
require 'warbler/web_server'
|
data/lib/warbler_jar.jar
CHANGED
Binary file
|
data/pom.xml
CHANGED
@@ -13,7 +13,7 @@ bundle up all of your application files for deployment to a Java environment.</d
|
|
13
13
|
<url>https://github.com/jruby/warbler</url>
|
14
14
|
<properties>
|
15
15
|
<tesla.dump.readOnly>true</tesla.dump.readOnly>
|
16
|
-
<jruby.plugins.version>1.0.
|
16
|
+
<jruby.plugins.version>1.0.10</jruby.plugins.version>
|
17
17
|
<tesla.dump.pom>pom.xml</tesla.dump.pom>
|
18
18
|
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
|
19
19
|
</properties>
|
data/spec/spec_helper.rb
CHANGED
@@ -88,6 +88,9 @@ module ExampleGroupHelpers
|
|
88
88
|
cur_dir = Dir.pwd
|
89
89
|
Dir.chdir(@gem_dir) do
|
90
90
|
`git init`
|
91
|
+
`git config user.email "warbler-test@null.com"`
|
92
|
+
`git config user.name "Warbler Test"`
|
93
|
+
|
91
94
|
# create the gemspec and Gemfile
|
92
95
|
File.open("Gemfile", "w") do |f|
|
93
96
|
f << <<-RUBY
|
@@ -102,6 +105,8 @@ module ExampleGroupHelpers
|
|
102
105
|
Gem::Specification.new do |gem|
|
103
106
|
gem.name = "#{gem_name}"
|
104
107
|
gem.version = '1.0'
|
108
|
+
gem.authors = ['John Doe']
|
109
|
+
gem.summary = "Gem for testing"
|
105
110
|
gem.platform = Gem::Platform::RUBY
|
106
111
|
gem.files = `git ls-files`.split("\n")
|
107
112
|
gem.add_runtime_dependency 'rake', [">= 10.4.2"]
|
@@ -21,6 +21,10 @@ describe Warbler::Jar, "with Bundler" do
|
|
21
21
|
@extra_config = block
|
22
22
|
end
|
23
23
|
|
24
|
+
def bundle_install(*args)
|
25
|
+
`cd #{Dir.pwd} && #{RUBY_EXE} -S bundle install #{args.join(' ')}`
|
26
|
+
end
|
27
|
+
|
24
28
|
let(:config) { drbclient.config(@extra_config) }
|
25
29
|
let(:jar) { drbclient.jar }
|
26
30
|
|
@@ -66,7 +70,7 @@ describe Warbler::Jar, "with Bundler" do
|
|
66
70
|
|
67
71
|
it "works with :git entries in Gemfiles" do
|
68
72
|
File.open("Gemfile", "w") {|f| f << "gem 'tester', :git => '#{@gem_dir}'\n"}
|
69
|
-
|
73
|
+
bundle_install '--local'
|
70
74
|
jar.apply(config)
|
71
75
|
file_list(%r{WEB-INF/gems/bundler/gems/tester[^/]*/lib/tester/version\.rb}).should_not be_empty
|
72
76
|
file_list(%r{WEB-INF/gems/bundler/gems/tester[^/]*/tester.gemspec}).should_not be_empty
|
@@ -74,7 +78,7 @@ describe Warbler::Jar, "with Bundler" do
|
|
74
78
|
|
75
79
|
it "bundles only the gemspec for :git entries that are excluded" do
|
76
80
|
File.open("Gemfile", "w") {|f| f << "gem 'rake'\ngroup :test do\ngem 'tester', :git => '#{@gem_dir}'\nend\n"}
|
77
|
-
|
81
|
+
bundle_install '--local'
|
78
82
|
jar.apply(config)
|
79
83
|
file_list(%r{WEB-INF/gems/bundler/gems/tester[^/]*/lib/tester/version\.rb}).should be_empty
|
80
84
|
file_list(%r{WEB-INF/gems/bundler/gems/tester[^/]*/tester.gemspec}).should_not be_empty
|
@@ -82,7 +86,7 @@ describe Warbler::Jar, "with Bundler" do
|
|
82
86
|
|
83
87
|
it "does not work with :path entries in Gemfiles" do
|
84
88
|
File.open("Gemfile", "w") {|f| f << "gem 'tester', :path => '#{@gem_dir}'\n"}
|
85
|
-
|
89
|
+
bundle_install '--local'
|
86
90
|
silence { jar.apply(config) }
|
87
91
|
file_list(%r{tester}).should be_empty
|
88
92
|
end
|
@@ -126,7 +130,7 @@ describe Warbler::Jar, "with Bundler" do
|
|
126
130
|
|
127
131
|
it "works with :git entries in Gemfiles" do
|
128
132
|
File.open("Gemfile", "w") {|f| f << "gem 'tester', :git => '#{@gem_dir}'\n"}
|
129
|
-
|
133
|
+
bundle_install '--local'
|
130
134
|
jar.apply(config)
|
131
135
|
file_list(%r{^bundler/gems/tester[^/]*/lib/tester/version\.rb}).should_not be_empty
|
132
136
|
file_list(%r{^bundler/gems/tester[^/]*/tester.gemspec}).should_not be_empty
|
@@ -137,7 +141,7 @@ describe Warbler::Jar, "with Bundler" do
|
|
137
141
|
end
|
138
142
|
|
139
143
|
it "adds BUNDLE_GEMFILE to init.rb" do
|
140
|
-
File.open("Gemfile", "w") {|f| f << "source
|
144
|
+
File.open("Gemfile", "w") {|f| f << "source 'http://rubygems.org/'" }
|
141
145
|
jar.add_init_file(config)
|
142
146
|
contents = jar.contents('META-INF/init.rb')
|
143
147
|
contents.should =~ /ENV\['BUNDLE_GEMFILE'\] = File.expand_path(.*, __FILE__)/
|
@@ -204,7 +208,7 @@ describe Warbler::Jar, "with Bundler" do
|
|
204
208
|
run_in_directory "spec/sample_bundler"
|
205
209
|
|
206
210
|
it "includes the bundler gem" do
|
207
|
-
|
211
|
+
bundle_install '--deployment'
|
208
212
|
jar.apply(config)
|
209
213
|
file_list(%r{gems/rake-10.4.2/lib}).should_not be_empty
|
210
214
|
file_list(%r{gems/bundler-}).should_not be_empty
|
@@ -29,13 +29,13 @@ describe Warbler::WebServer::Artifact do
|
|
29
29
|
it "uses default (maven) local repository" do
|
30
30
|
ENV['HOME'] = '/home/borg'
|
31
31
|
ENV.delete('M2_HOME'); ENV.delete('MAVEN_HOME')
|
32
|
-
|
32
|
+
sample_artifact.local_repository.should == "/home/borg/.m2/repository"
|
33
33
|
end
|
34
34
|
|
35
35
|
it "detects a custom maven repository setting" do
|
36
36
|
ENV['HOME'] = '/home/borg'
|
37
37
|
ENV['M2_HOME'] = File.expand_path('../m2_home', File.dirname(__FILE__))
|
38
|
-
|
38
|
+
sample_artifact.local_repository.should == '/usr/local/maven/repo'
|
39
39
|
end
|
40
40
|
|
41
41
|
end
|
metadata
CHANGED
@@ -1,53 +1,44 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: warbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sieger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: rake
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 10.1.0
|
20
14
|
requirement: !ruby/object:Gem::Requirement
|
21
15
|
requirements:
|
22
16
|
- - ">="
|
23
17
|
- !ruby/object:Gem::Version
|
24
18
|
version: 10.1.0
|
19
|
+
name: rake
|
25
20
|
prerelease: false
|
26
21
|
type: :runtime
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: jruby-jars
|
29
22
|
version_requirements: !ruby/object:Gem::Requirement
|
30
23
|
requirements:
|
31
24
|
- - ">="
|
32
25
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
26
|
+
version: 10.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
34
28
|
requirement: !ruby/object:Gem::Requirement
|
35
29
|
requirements:
|
36
30
|
- - ">="
|
37
31
|
- !ruby/object:Gem::Version
|
38
32
|
version: 9.0.0.0.pre2
|
33
|
+
name: jruby-jars
|
39
34
|
prerelease: false
|
40
35
|
type: :runtime
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: jruby-rack
|
43
36
|
version_requirements: !ruby/object:Gem::Requirement
|
44
37
|
requirements:
|
45
38
|
- - ">="
|
46
39
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
48
|
-
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: '1.3'
|
40
|
+
version: 9.0.0.0.pre2
|
41
|
+
- !ruby/object:Gem::Dependency
|
51
42
|
requirement: !ruby/object:Gem::Requirement
|
52
43
|
requirements:
|
53
44
|
- - ">="
|
@@ -56,18 +47,18 @@ dependencies:
|
|
56
47
|
- - "<"
|
57
48
|
- !ruby/object:Gem::Version
|
58
49
|
version: '1.3'
|
50
|
+
name: jruby-rack
|
59
51
|
prerelease: false
|
60
52
|
type: :runtime
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: rubyzip
|
63
53
|
version_requirements: !ruby/object:Gem::Requirement
|
64
54
|
requirements:
|
65
55
|
- - ">="
|
66
56
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
57
|
+
version: 1.1.1
|
68
58
|
- - "<"
|
69
59
|
- !ruby/object:Gem::Version
|
70
|
-
version: '1.
|
60
|
+
version: '1.3'
|
61
|
+
- !ruby/object:Gem::Dependency
|
71
62
|
requirement: !ruby/object:Gem::Requirement
|
72
63
|
requirements:
|
73
64
|
- - ">="
|
@@ -76,64 +67,73 @@ dependencies:
|
|
76
67
|
- - "<"
|
77
68
|
- !ruby/object:Gem::Version
|
78
69
|
version: '1.2'
|
70
|
+
name: rubyzip
|
79
71
|
prerelease: false
|
80
72
|
type: :runtime
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: jbundler
|
83
73
|
version_requirements: !ruby/object:Gem::Requirement
|
84
74
|
requirements:
|
85
|
-
- - "
|
75
|
+
- - ">="
|
86
76
|
- !ruby/object:Gem::Version
|
87
|
-
version: 0
|
77
|
+
version: '1.0'
|
78
|
+
- - "<"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '1.2'
|
81
|
+
- !ruby/object:Gem::Dependency
|
88
82
|
requirement: !ruby/object:Gem::Requirement
|
89
83
|
requirements:
|
90
84
|
- - "~>"
|
91
85
|
- !ruby/object:Gem::Version
|
92
86
|
version: 0.5.5
|
87
|
+
name: jbundler
|
93
88
|
prerelease: false
|
94
89
|
type: :development
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: ruby-maven
|
97
90
|
version_requirements: !ruby/object:Gem::Requirement
|
98
91
|
requirements:
|
99
92
|
- - "~>"
|
100
93
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
94
|
+
version: 0.5.5
|
95
|
+
- !ruby/object:Gem::Dependency
|
102
96
|
requirement: !ruby/object:Gem::Requirement
|
103
97
|
requirements:
|
104
98
|
- - "~>"
|
105
99
|
- !ruby/object:Gem::Version
|
106
100
|
version: 3.1.1.0
|
101
|
+
name: ruby-maven
|
107
102
|
prerelease: false
|
108
103
|
type: :development
|
109
|
-
- !ruby/object:Gem::Dependency
|
110
|
-
name: rspec
|
111
104
|
version_requirements: !ruby/object:Gem::Requirement
|
112
105
|
requirements:
|
113
106
|
- - "~>"
|
114
107
|
- !ruby/object:Gem::Version
|
115
|
-
version:
|
108
|
+
version: 3.1.1.0
|
109
|
+
- !ruby/object:Gem::Dependency
|
116
110
|
requirement: !ruby/object:Gem::Requirement
|
117
111
|
requirements:
|
118
112
|
- - "~>"
|
119
113
|
- !ruby/object:Gem::Version
|
120
114
|
version: '2.10'
|
115
|
+
name: rspec
|
121
116
|
prerelease: false
|
122
117
|
type: :development
|
123
|
-
- !ruby/object:Gem::Dependency
|
124
|
-
name: rdoc
|
125
118
|
version_requirements: !ruby/object:Gem::Requirement
|
126
119
|
requirements:
|
127
|
-
- - "
|
120
|
+
- - "~>"
|
128
121
|
- !ruby/object:Gem::Version
|
129
|
-
version: 2.
|
122
|
+
version: '2.10'
|
123
|
+
- !ruby/object:Gem::Dependency
|
130
124
|
requirement: !ruby/object:Gem::Requirement
|
131
125
|
requirements:
|
132
126
|
- - ">="
|
133
127
|
- !ruby/object:Gem::Version
|
134
128
|
version: 2.4.2
|
129
|
+
name: rdoc
|
135
130
|
prerelease: false
|
136
131
|
type: :development
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: 2.4.2
|
137
137
|
description: |-
|
138
138
|
Warbler is a gem to make a Java jar or war file out of any Ruby,
|
139
139
|
Rails, or Rack application. Warbler provides a minimal, flexible, Ruby-like way to
|
@@ -241,6 +241,7 @@ files:
|
|
241
241
|
- integration/simple_rack_test/src/test/java/org/jruby/warbler/AppTestIT.java
|
242
242
|
- lib/warbler.rb
|
243
243
|
- lib/warbler/application.rb
|
244
|
+
- lib/warbler/bundler_helper.rb
|
244
245
|
- lib/warbler/config.rb
|
245
246
|
- lib/warbler/executable_helper.rb
|
246
247
|
- lib/warbler/gems.rb
|
@@ -492,7 +493,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
492
493
|
version: 1.3.1
|
493
494
|
requirements: []
|
494
495
|
rubyforge_project:
|
495
|
-
rubygems_version: 2.4.
|
496
|
+
rubygems_version: 2.4.8
|
496
497
|
signing_key:
|
497
498
|
specification_version: 4
|
498
499
|
summary: Warbler chirpily constructs .war files of your Rails applications.
|