warbler 2.0.0.pre1 → 2.0.0.pre2
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 +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.
|