warbler 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +15 -1
- data/ext/JarMain.java +9 -4
- data/ext/WarMain.java +44 -27
- data/ext/WarblerJar.java +1 -1
- data/lib/warbler/jar.rb +23 -15
- data/lib/warbler/templates/jar.erb +4 -4
- data/lib/warbler/templates/rack.erb +3 -1
- data/lib/warbler/templates/war.erb +4 -2
- data/lib/warbler/traits.rb +4 -2
- data/lib/warbler/traits/gemspec.rb +18 -25
- data/lib/warbler/traits/jar.rb +1 -1
- data/lib/warbler/version.rb +1 -1
- data/lib/warbler_jar.jar +0 -0
- data/spec/rails4_stub/Gemfile.lock +112 -0
- data/spec/sample_bundler/.bundle/config +4 -0
- data/spec/sample_bundler/Gemfile.lock +13 -0
- data/spec/sample_jar/sample_jar.gemspec +2 -1
- data/spec/sample_jar/sbin/sample_jar +5 -0
- data/spec/warbler/jar_spec.rb +1 -1
- data/warbler.gemspec +5 -1
- data/web.xml.erb +1 -1
- metadata +4 -4
- data/.gitignore +0 -16
- data/.travis.yml +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ea2ec506ff64a6cc7d49b7d75e1bb35ed683d22
|
4
|
+
data.tar.gz: 3c3eae60fa8d1a946a6bfd2932b85d1f5720eb22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: faf7281b8b54b1f1ac812e89852d7ad55904ef3c4fd9beac4f0a01bd2ddc469c24a973ec1535bbdf6c15349f3f5cdafa576f1c6ded932ff6fd4a83471d784bbf
|
7
|
+
data.tar.gz: cbe6bd24e52e9fb102e42b9dfead6f34ec26616324357361936050e2dd5d3e9d6be0ea6811ae586b84c56412a0afbf9e6173775bcda4b431d698c7b5238cd778
|
data/History.txt
CHANGED
@@ -1,4 +1,18 @@
|
|
1
|
-
==
|
1
|
+
== 2.0.2
|
2
|
+
|
3
|
+
- #380: exclude spec/integration/rakelib and dot-files being packed into .gem
|
4
|
+
- #379: 2.0.1 regression due forcing GEM_PATH = GEM_HOME
|
5
|
+
|
6
|
+
== 2.0.1
|
7
|
+
|
8
|
+
- #367: avoid duplicate .jar copies in WEB-INF/lib
|
9
|
+
- #364: support for compiling .rb files using jrubyc with options
|
10
|
+
- #362: limit rubyzip version to not match too far
|
11
|
+
- #363: [backport] support for running with (recent) rubyzip 1.2.0
|
12
|
+
|
13
|
+
== 2.0.0
|
14
|
+
|
15
|
+
- Initial release with 9k support
|
2
16
|
|
3
17
|
== 1.4.9
|
4
18
|
|
data/ext/JarMain.java
CHANGED
@@ -9,6 +9,7 @@ import java.io.File;
|
|
9
9
|
import java.io.IOException;
|
10
10
|
import java.io.FileOutputStream;
|
11
11
|
import java.io.InputStream;
|
12
|
+
import java.io.PrintStream;
|
12
13
|
import java.lang.reflect.InvocationTargetException;
|
13
14
|
import java.lang.reflect.Method;
|
14
15
|
import java.net.URI;
|
@@ -104,7 +105,7 @@ public class JarMain implements Runnable {
|
|
104
105
|
FileOutputStream outStream = new FileOutputStream(file);
|
105
106
|
final byte[] buf = new byte[65536];
|
106
107
|
try {
|
107
|
-
int bytesRead
|
108
|
+
int bytesRead;
|
108
109
|
while ((bytesRead = entryStream.read(buf)) != -1) {
|
109
110
|
outStream.write(buf, 0, bytesRead);
|
110
111
|
}
|
@@ -114,7 +115,7 @@ public class JarMain implements Runnable {
|
|
114
115
|
outStream.close();
|
115
116
|
file.deleteOnExit();
|
116
117
|
}
|
117
|
-
if (false) debug(entry.getName() + " extracted to " + file.getPath());
|
118
|
+
// if (false) debug(entry.getName() + " extracted to " + file.getPath());
|
118
119
|
return file.toURI().toURL();
|
119
120
|
}
|
120
121
|
|
@@ -167,7 +168,11 @@ public class JarMain implements Runnable {
|
|
167
168
|
}
|
168
169
|
|
169
170
|
protected static void debug(Throwable t) {
|
170
|
-
|
171
|
+
debug(t, System.out);
|
172
|
+
}
|
173
|
+
|
174
|
+
private static void debug(Throwable t, PrintStream out) {
|
175
|
+
if ( isDebug() ) t.printStackTrace(out);
|
171
176
|
}
|
172
177
|
|
173
178
|
protected void warn(String msg) {
|
@@ -180,7 +185,7 @@ public class JarMain implements Runnable {
|
|
180
185
|
|
181
186
|
protected static void error(String msg, Throwable t) {
|
182
187
|
System.err.println("ERROR: " + msg);
|
183
|
-
debug(t);
|
188
|
+
debug(t, System.err);
|
184
189
|
}
|
185
190
|
|
186
191
|
protected void delete(File f) {
|
data/ext/WarMain.java
CHANGED
@@ -100,13 +100,14 @@ public class WarMain extends JarMain {
|
|
100
100
|
String execArg = argsList.get(sIndex + 1);
|
101
101
|
executableArgv = argsList.subList(sIndex + 2, argsList.size()).toArray(new String[0]);
|
102
102
|
|
103
|
-
if (execArg.equals("
|
104
|
-
warn("`bundle exec' may drop out of the Warbler environment and into the system environment");
|
105
|
-
} else if (execArg.equals("rails")) {
|
103
|
+
if (execArg.equals("rails")) {
|
106
104
|
// The rails executable doesn't play well with ScriptingContainer, so we've packaged the
|
107
105
|
// same script that would have been generated by `rake rails:update:bin`
|
108
106
|
execArg = "./META-INF/rails.rb";
|
109
107
|
}
|
108
|
+
else if (execArg.equals("bundle") && executableArgv.length > 0 && executableArgv[0].equals("exec")) {
|
109
|
+
warn("`bundle exec' may drop out of the Warbler environment and into the system environment");
|
110
|
+
}
|
110
111
|
|
111
112
|
executable = execArg;
|
112
113
|
}
|
@@ -124,7 +125,7 @@ public class WarMain extends JarMain {
|
|
124
125
|
FileOutputStream outStream = new FileOutputStream(jarFile);
|
125
126
|
try {
|
126
127
|
byte[] buf = new byte[4096];
|
127
|
-
int bytesRead
|
128
|
+
int bytesRead;
|
128
129
|
while ((bytesRead = jarStream.read(buf)) != -1) {
|
129
130
|
outStream.write(buf, 0, bytesRead);
|
130
131
|
}
|
@@ -179,7 +180,7 @@ public class WarMain extends JarMain {
|
|
179
180
|
+ WEBSERVER_PROPERTIES
|
180
181
|
+ " is missing 'mainclass' property)");
|
181
182
|
}
|
182
|
-
Class klass = Class.forName(mainClass, true, loader);
|
183
|
+
Class<?> klass = Class.forName(mainClass, true, loader);
|
183
184
|
Method main = klass.getDeclaredMethod("main", new Class[] { String[].class });
|
184
185
|
String[] newArgs = launchWebServerArguments(props);
|
185
186
|
debug("invoking webserver with: " + Arrays.deepToString(newArgs));
|
@@ -240,7 +241,9 @@ public class WarMain extends JarMain {
|
|
240
241
|
|
241
242
|
invokeMethod(rubyInstanceConfig, "setUpdateNativeENVEnabled", new Class[] { Boolean.TYPE }, false);
|
242
243
|
|
243
|
-
final
|
244
|
+
final CharSequence execScriptEnvPre = executableScriptEnvPrefix();
|
245
|
+
|
246
|
+
final String executablePath = locateExecutable(scriptingContainer, execScriptEnvPre);
|
244
247
|
if ( executablePath == null ) {
|
245
248
|
throw new IllegalStateException("failed to locate gem executable: '" + executable + "'");
|
246
249
|
}
|
@@ -252,7 +255,7 @@ public class WarMain extends JarMain {
|
|
252
255
|
|
253
256
|
debug("loading resource: " + executablePath);
|
254
257
|
Object executableInput =
|
255
|
-
new SequenceInputStream(new ByteArrayInputStream(
|
258
|
+
new SequenceInputStream(new ByteArrayInputStream(execScriptEnvPre.toString().getBytes()),
|
256
259
|
(InputStream) invokeMethod(rubyInstanceConfig, "getScriptSource"));
|
257
260
|
|
258
261
|
debug("invoking " + executablePath + " with: " + Arrays.toString(executableArgv));
|
@@ -264,6 +267,7 @@ public class WarMain extends JarMain {
|
|
264
267
|
return ( outcome instanceof Number ) ? ( (Number) outcome ).intValue() : 0;
|
265
268
|
}
|
266
269
|
|
270
|
+
@Deprecated
|
267
271
|
protected String locateExecutable(final Object scriptingContainer) throws Exception {
|
268
272
|
if ( executable == null ) {
|
269
273
|
throw new IllegalStateException("no executable");
|
@@ -273,11 +277,27 @@ public class WarMain extends JarMain {
|
|
273
277
|
return exec.getAbsolutePath();
|
274
278
|
}
|
275
279
|
else {
|
276
|
-
final String script = locateExecutableScript(executable);
|
280
|
+
final String script = locateExecutableScript(executable, executableScriptEnvPrefix());
|
277
281
|
return (String) invokeMethod(scriptingContainer, "runScriptlet", script);
|
278
282
|
}
|
279
283
|
}
|
280
|
-
|
284
|
+
|
285
|
+
protected String locateExecutable(final Object scriptingContainer, final CharSequence envPreScript)
|
286
|
+
throws Exception {
|
287
|
+
if ( executable == null ) {
|
288
|
+
throw new IllegalStateException("no executable");
|
289
|
+
}
|
290
|
+
final File exec = new File(extractRoot, executable);
|
291
|
+
if ( exec.exists() ) {
|
292
|
+
return exec.getAbsolutePath();
|
293
|
+
}
|
294
|
+
else {
|
295
|
+
final String script = locateExecutableScript(executable, envPreScript);
|
296
|
+
return (String) invokeMethod(scriptingContainer, "runScriptlet", script);
|
297
|
+
}
|
298
|
+
}
|
299
|
+
|
300
|
+
protected CharSequence executableScriptEnvPrefix() {
|
281
301
|
final String gemsDir = new File(extractRoot, "gems").getAbsolutePath();
|
282
302
|
final String gemfile = new File(extractRoot, "Gemfile").getAbsolutePath();
|
283
303
|
debug("setting GEM_HOME to " + gemsDir);
|
@@ -286,22 +306,20 @@ public class WarMain extends JarMain {
|
|
286
306
|
// ideally this would look up the config.override_gem_home setting
|
287
307
|
return "ENV['GEM_HOME'] = ENV['GEM_PATH'] = '"+ gemsDir +"' \n" +
|
288
308
|
"ENV['BUNDLE_GEMFILE'] ||= '"+ gemfile +"' \n" +
|
289
|
-
"require 'uri:classloader:/META-INF/init.rb'
|
309
|
+
"require 'uri:classloader:/META-INF/init.rb'";
|
290
310
|
}
|
291
311
|
|
292
|
-
protected String locateExecutableScript(final String executable) {
|
293
|
-
return
|
294
|
-
"begin\n" +
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
// bundler not used
|
304
|
-
" end\n" +
|
312
|
+
protected String locateExecutableScript(final String executable, final CharSequence envPreScript) {
|
313
|
+
return ( envPreScript == null ? "" : envPreScript + " \n" ) +
|
314
|
+
"begin\n" + // locate the executable within gemspecs :
|
315
|
+
" require 'rubygems' unless defined?(Gem) \n" +
|
316
|
+
" begin\n" + // add bundled gems to load path :
|
317
|
+
" require 'bundler' \n" +
|
318
|
+
" rescue LoadError\n" + // bundler not used
|
319
|
+
" else\n" +
|
320
|
+
" env = ENV['RAILS_ENV'] || ENV['RACK_ENV'] \n" + // init.rb sets ENV['RAILS_ENV'] ||= ...
|
321
|
+
" env ? Bundler.setup(:default, env) : Bundler.setup(:default) \n" +
|
322
|
+
" end if ENV_JAVA['warbler.bundler.setup'] != 'false' \n" + // java -Dwarbler.bundler.setup=false -jar my.war -S pry
|
305
323
|
" exec = '"+ executable +"' \n" +
|
306
324
|
" spec = Gem::Specification.find { |s| s.executables.include?(exec) } \n" +
|
307
325
|
" spec ? spec.bin_file(exec) : nil \n" +
|
@@ -327,7 +345,8 @@ public class WarMain extends JarMain {
|
|
327
345
|
launchWebServer(server);
|
328
346
|
}
|
329
347
|
catch (FileNotFoundException e) {
|
330
|
-
|
348
|
+
final String msg = e.getMessage();
|
349
|
+
if ( msg != null && msg.contains("WEB-INF/webserver.jar") ) {
|
331
350
|
System.out.println("specify the -S argument followed by the bin file to run e.g. `java -jar rails.war -S rake -T` ...");
|
332
351
|
System.out.println("(or if you'd like your .war file to start a web server package it using `warbler executable war`)");
|
333
352
|
}
|
@@ -335,9 +354,7 @@ public class WarMain extends JarMain {
|
|
335
354
|
}
|
336
355
|
return 0;
|
337
356
|
}
|
338
|
-
|
339
|
-
return super.start();
|
340
|
-
}
|
357
|
+
return super.start();
|
341
358
|
}
|
342
359
|
|
343
360
|
@Override
|
data/ext/WarblerJar.java
CHANGED
@@ -153,7 +153,7 @@ public class WarblerJar {
|
|
153
153
|
}
|
154
154
|
}
|
155
155
|
|
156
|
-
private static Pattern PROTOCOL = Pattern.compile("^[a-z][a-z0-9]+:");
|
156
|
+
private static final Pattern PROTOCOL = Pattern.compile("^[a-z][a-z0-9]+:");
|
157
157
|
|
158
158
|
private static InputStream getStream(String jar, String entry) throws IOException {
|
159
159
|
Matcher m = PROTOCOL.matcher(jar);
|
data/lib/warbler/jar.rb
CHANGED
@@ -32,7 +32,7 @@ module Warbler
|
|
32
32
|
|
33
33
|
def contents(entry)
|
34
34
|
file = files[entry]
|
35
|
-
file.respond_to?(:read) ? file.read : File.
|
35
|
+
file.respond_to?(:read) ? file.read : File.read(file)
|
36
36
|
end
|
37
37
|
|
38
38
|
def compile(config)
|
@@ -125,16 +125,12 @@ module Warbler
|
|
125
125
|
def gather_all_rb_files(config)
|
126
126
|
FileUtils.mkdir_p('tmp')
|
127
127
|
# Gather all the files in the files list and copy them to the tmp directory
|
128
|
-
|
129
|
-
|
130
|
-
if gems_to_compile.is_a?(Array)
|
131
|
-
gems_to_compile = gems_to_compile.inject({}) {|h,z| h.merge!(z[0] => z[1]) }
|
132
|
-
end
|
133
|
-
gems_to_compile.each do |jar_file, rb|
|
128
|
+
files_to_compile = files.select { |_, f| !f.is_a?(StringIO) && f.end_with?('.rb') }
|
129
|
+
files_to_compile.each do |jar_file, rb|
|
134
130
|
FileUtils.mkdir_p(File.dirname(File.join('tmp', jar_file)))
|
135
131
|
new_rb = File.join('tmp', jar_file)
|
136
132
|
FileUtils.copy(rb, new_rb)
|
137
|
-
|
133
|
+
files_to_compile[jar_file] = new_rb
|
138
134
|
end
|
139
135
|
# Gather all the application files which the user wrote (not dependencies)
|
140
136
|
main_files_to_compile = config.compiled_ruby_files - config.excludes.to_a
|
@@ -145,9 +141,9 @@ module Warbler
|
|
145
141
|
main_files_to_compile = main_files_to_compile.inject({}) {|h,f| h.merge!(f => f) }
|
146
142
|
files.keys.each do |k|
|
147
143
|
# Update files list to point to the temporary file
|
148
|
-
files[k] =
|
144
|
+
files[k] = files_to_compile[k] || main_files_to_compile[k] || files[k]
|
149
145
|
end
|
150
|
-
main_files_to_compile.merge(
|
146
|
+
main_files_to_compile.merge(files_to_compile)
|
151
147
|
end
|
152
148
|
|
153
149
|
# Apply the information in a Warbler::Config object in order to
|
@@ -187,7 +183,7 @@ module Warbler
|
|
187
183
|
|
188
184
|
# Add a manifest file either from config or by making a default manifest.
|
189
185
|
def add_manifest(config = nil)
|
190
|
-
unless @files.keys.detect{|k| k =~ /^META-INF\/MANIFEST\.MF$/i}
|
186
|
+
unless @files.keys.detect{ |k| k =~ /^META-INF\/MANIFEST\.MF$/i }
|
191
187
|
if config && config.manifest_file
|
192
188
|
@files['META-INF/MANIFEST.MF'] = config.manifest_file
|
193
189
|
else
|
@@ -198,12 +194,12 @@ module Warbler
|
|
198
194
|
|
199
195
|
# Add java libraries to WEB-INF/lib.
|
200
196
|
def find_java_libs(config)
|
201
|
-
config.java_libs.map {|lib| add_with_pathmaps(config, lib, :java_libs) }
|
197
|
+
config.java_libs.map { |lib| add_with_pathmaps(config, lib, :java_libs) }
|
202
198
|
end
|
203
199
|
|
204
200
|
# Add java classes to WEB-INF/classes.
|
205
201
|
def find_java_classes(config)
|
206
|
-
config.java_classes.map {|f| add_with_pathmaps(config, f, :java_classes) }
|
202
|
+
config.java_classes.map { |f| add_with_pathmaps(config, f, :java_classes) }
|
207
203
|
end
|
208
204
|
|
209
205
|
# Add gems to WEB-INF/gems
|
@@ -218,7 +214,19 @@ module Warbler
|
|
218
214
|
full_gem_path = Pathname.new(spec.full_gem_path)
|
219
215
|
|
220
216
|
# skip gems whose full_gem_path does not exist
|
221
|
-
|
217
|
+
unless full_gem_path.exist?
|
218
|
+
# its very likely that its a default gem e.g. json/jruby-openssl :
|
219
|
+
if (Gem.default_dir rescue nil) && full_gem_path.to_s.start_with?(Gem.default_dir)
|
220
|
+
# OK if the gem does not exists as its un-packed on the "shared" path
|
221
|
+
# ... at least gem spec.spec_file should exists although not crucial
|
222
|
+
if JRUBY_VERSION != JRubyJars::VERSION
|
223
|
+
warn "skipping #{spec.name} default gem (assuming its part of jruby-jars #{JRubyJars::VERSION})" unless silent?
|
224
|
+
end
|
225
|
+
else
|
226
|
+
warn "skipping #{spec.name} gem (#{full_gem_path.to_s} does not exist)"
|
227
|
+
end
|
228
|
+
return
|
229
|
+
end
|
222
230
|
|
223
231
|
@files[apply_pathmaps(config, "#{spec.full_name}.gemspec", :gemspecs)] = StringIO.new(spec.to_ruby)
|
224
232
|
FileList["#{full_gem_path.to_s}/**/*"].each do |src|
|
@@ -296,7 +304,7 @@ module Warbler
|
|
296
304
|
entries.keys.sort.each do |entry|
|
297
305
|
src = entries[entry]
|
298
306
|
if src.respond_to?(:read)
|
299
|
-
zipfile.get_output_stream(entry) {|f| f << src.read }
|
307
|
+
zipfile.get_output_stream(entry) { |f| f << src.read }
|
300
308
|
elsif src.nil? || File.directory?(src)
|
301
309
|
if File.symlink?(entry) && ! defined?(JRUBY_VERSION)
|
302
310
|
warn "directory symlinks are not followed unless using JRuby; " +
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<% if config.relative_gem_path.empty? -%>
|
2
|
-
ENV['GEM_HOME'] <%= config.override_gem_home ? '=' : '||=' %> File.expand_path('
|
2
|
+
ENV['GEM_HOME'] <%= config.override_gem_home ? '=' : '||=' %> File.expand_path(File.join('..', '..', '<%= config.gem_path %>'), __FILE__)
|
3
3
|
<% else -%>
|
4
|
-
ENV['GEM_HOME'] <%= config.override_gem_home ? '=' : '||=' %> File.expand_path('
|
4
|
+
ENV['GEM_HOME'] <%= config.override_gem_home ? '=' : '||=' %> File.expand_path(File.join('..', '..', '<%= config.relative_gem_path %>'), __FILE__)
|
5
5
|
<% end -%>
|
6
6
|
<% if config.override_gem_home -%>
|
7
|
-
ENV['GEM_PATH'] =
|
7
|
+
ENV['GEM_PATH'] = nil # RGs sets Gem.paths.path = Gem.default_path + [ GEM_HOME ]
|
8
8
|
<% end -%>
|
9
9
|
<% if config.bundler && config.bundler[:gemfile_path] -%>
|
10
|
-
ENV['BUNDLE_GEMFILE'] = File.expand_path('
|
10
|
+
ENV['BUNDLE_GEMFILE'] = File.expand_path(File.join('..', '..', '<%= config.bundler[:gemfile_path] %>'), __FILE__)
|
11
11
|
<% end -%>
|
@@ -1,3 +1,5 @@
|
|
1
|
-
|
1
|
+
<% if (params = config.webxml.context_params) && params['rack.env'] -%>
|
2
|
+
ENV['RACK_ENV'] ||= '<%= params['rack.env'] %>'
|
3
|
+
<% end -%>
|
2
4
|
|
3
5
|
$LOAD_PATH.unshift $servlet_context.getRealPath('/WEB-INF') if $servlet_context
|
@@ -1,7 +1,9 @@
|
|
1
1
|
if $servlet_context.nil?
|
2
2
|
ENV['GEM_HOME'] <%= config.override_gem_home ? '=' : '||=' %> File.expand_path(File.join('..', '..', '<%= config.gem_path %>'), __FILE__)
|
3
3
|
<% if config.override_gem_home -%>
|
4
|
-
|
4
|
+
<% # GEM_HOME/GEM_PATH are set as .war gets extracted (on java -jar ...)
|
5
|
+
# ... thus setting `ENV['GEM_PATH'] = nil` would cause a boot failure
|
6
|
+
-%>
|
5
7
|
<% end -%>
|
6
8
|
<% if config.bundler && config.bundler[:gemfile_path] -%>
|
7
9
|
ENV['BUNDLE_GEMFILE'] ||= File.expand_path(File.join('..', '..', '<%= config.bundler[:gemfile_path] %>'), __FILE__)
|
@@ -9,7 +11,7 @@ if $servlet_context.nil?
|
|
9
11
|
else
|
10
12
|
ENV['GEM_HOME'] <%= config.override_gem_home ? '=' : '||=' %> $servlet_context.getRealPath('<%= config.gem_path %>')
|
11
13
|
<% if config.override_gem_home -%>
|
12
|
-
ENV['GEM_PATH'] =
|
14
|
+
ENV['GEM_PATH'] = nil
|
13
15
|
<% end -%>
|
14
16
|
<% if config.bundler && config.bundler[:gemfile_path] -%>
|
15
17
|
ENV['BUNDLE_GEMFILE'] ||= $servlet_context.getRealPath('/<%= config.bundler[:gemfile_path] %>')
|
data/lib/warbler/traits.rb
CHANGED
@@ -74,11 +74,13 @@ module Warbler
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def add_init_load_path(path)
|
77
|
-
config.init_contents << StringIO.new("$LOAD_PATH.unshift
|
77
|
+
config.init_contents << StringIO.new("$LOAD_PATH.unshift File.expand_path(File.join('..', '..', '#{path}'), __FILE__)\n")
|
78
|
+
# with __FILE__ = "uri:classloader:/META-INF/init.rb"
|
79
|
+
# ... will end up as "uri:classloader://xxx-gem/lib"
|
78
80
|
end
|
79
81
|
|
80
82
|
def add_main_rb(jar, bin_path, params = nil)
|
81
|
-
binary = ""
|
83
|
+
binary = "".dup
|
82
84
|
binary << "ARGV.unshift('#{params}')\n" if params
|
83
85
|
binary << "load '#{bin_path}'"
|
84
86
|
jar.files['META-INF/main.rb'] = StringIO.new(binary)
|
@@ -18,18 +18,17 @@ module Warbler
|
|
18
18
|
!Dir['*.gemspec'].empty?
|
19
19
|
end
|
20
20
|
|
21
|
-
def before_configure
|
21
|
+
def before_configure; require 'yaml'
|
22
22
|
@spec_file = Dir['*.gemspec'].first
|
23
|
-
require 'yaml'
|
24
23
|
@spec = File.open(@spec_file) { |f| Gem::Specification.from_yaml(f) } rescue Gem::Specification.load(@spec_file)
|
25
24
|
@spec.runtime_dependencies.each { |g| config.gems << g }
|
26
25
|
config.dirs = []
|
27
|
-
config.compiled_ruby_files = @spec.files.select {|f| f =~ /\.rb$/}
|
26
|
+
config.compiled_ruby_files = @spec.files.select { |f| f =~ /\.rb$/ }
|
28
27
|
end
|
29
28
|
|
30
29
|
def after_configure
|
31
30
|
@spec.require_paths.each do |p|
|
32
|
-
add_init_load_path(config.pathmaps.application.inject(p) {|pm,x| pm.pathmap(x)})
|
31
|
+
add_init_load_path( config.pathmaps.application.inject(p) { |pm,x| pm.pathmap(x) } )
|
33
32
|
end
|
34
33
|
end
|
35
34
|
|
@@ -55,32 +54,26 @@ module Warbler
|
|
55
54
|
|
56
55
|
def default_executable
|
57
56
|
if ! @spec.executables.empty?
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
"bin/#{
|
57
|
+
exe_script = @spec.executables.first
|
58
|
+
exe_path = File.join(@spec.bindir, exe_script) # bin/script
|
59
|
+
if File.exists?(exe_path)
|
60
|
+
exe_path
|
61
|
+
elsif File.exists?("bin/#{exe_script}") # compatibility
|
62
|
+
"bin/#{exe_script}" # ... should probably remove this
|
64
63
|
else
|
65
|
-
exe_script
|
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
|
64
|
+
raise "no `#{exe_script}` executable script found"
|
73
65
|
end
|
74
|
-
elsif
|
75
|
-
warn "
|
76
|
-
|
77
|
-
elsif
|
78
|
-
warn "
|
79
|
-
|
66
|
+
elsif exe_path = Dir['bin/*'].sort.first
|
67
|
+
warn "no executables found in #{@spec_file}, using #{exe_path}"
|
68
|
+
exe_path
|
69
|
+
elsif exe_path = Dir['exe/*'].sort.first
|
70
|
+
warn "no executables found in #{@spec_file}, using #{exe_path}"
|
71
|
+
exe_path
|
80
72
|
else
|
81
|
-
raise "
|
73
|
+
raise "no executable script found"
|
82
74
|
end
|
83
75
|
end
|
76
|
+
|
84
77
|
end
|
85
78
|
end
|
86
79
|
end
|
data/lib/warbler/traits/jar.rb
CHANGED
data/lib/warbler/version.rb
CHANGED
data/lib/warbler_jar.jar
CHANGED
Binary file
|
@@ -0,0 +1,112 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
actionmailer (4.2.5.1)
|
5
|
+
actionpack (= 4.2.5.1)
|
6
|
+
actionview (= 4.2.5.1)
|
7
|
+
activejob (= 4.2.5.1)
|
8
|
+
mail (~> 2.5, >= 2.5.4)
|
9
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
10
|
+
actionpack (4.2.5.1)
|
11
|
+
actionview (= 4.2.5.1)
|
12
|
+
activesupport (= 4.2.5.1)
|
13
|
+
rack (~> 1.6)
|
14
|
+
rack-test (~> 0.6.2)
|
15
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
16
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
17
|
+
actionview (4.2.5.1)
|
18
|
+
activesupport (= 4.2.5.1)
|
19
|
+
builder (~> 3.1)
|
20
|
+
erubis (~> 2.7.0)
|
21
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
22
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
23
|
+
activejob (4.2.5.1)
|
24
|
+
activesupport (= 4.2.5.1)
|
25
|
+
globalid (>= 0.3.0)
|
26
|
+
activemodel (4.2.5.1)
|
27
|
+
activesupport (= 4.2.5.1)
|
28
|
+
builder (~> 3.1)
|
29
|
+
activerecord (4.2.5.1)
|
30
|
+
activemodel (= 4.2.5.1)
|
31
|
+
activesupport (= 4.2.5.1)
|
32
|
+
arel (~> 6.0)
|
33
|
+
activerecord-jdbc-adapter (1.3.19)
|
34
|
+
activerecord (>= 2.2)
|
35
|
+
activerecord-jdbcpostgresql-adapter (1.3.19)
|
36
|
+
activerecord-jdbc-adapter (~> 1.3.19)
|
37
|
+
jdbc-postgres (>= 9.1)
|
38
|
+
activesupport (4.2.5.1)
|
39
|
+
i18n (~> 0.7)
|
40
|
+
json (~> 1.7, >= 1.7.7)
|
41
|
+
minitest (~> 5.1)
|
42
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
43
|
+
tzinfo (~> 1.1)
|
44
|
+
arel (6.0.3)
|
45
|
+
builder (3.2.2)
|
46
|
+
concurrent-ruby (1.0.0-java)
|
47
|
+
erubis (2.7.0)
|
48
|
+
globalid (0.3.6)
|
49
|
+
activesupport (>= 4.1.0)
|
50
|
+
i18n (0.7.0)
|
51
|
+
jdbc-postgres (9.4.1206)
|
52
|
+
json (1.8.3-java)
|
53
|
+
loofah (2.0.3)
|
54
|
+
nokogiri (>= 1.5.9)
|
55
|
+
mail (2.6.3)
|
56
|
+
mime-types (>= 1.16, < 3)
|
57
|
+
mime-types (2.99)
|
58
|
+
minitest (5.8.4)
|
59
|
+
nokogiri (1.6.7.2-java)
|
60
|
+
rack (1.6.4)
|
61
|
+
rack-test (0.6.3)
|
62
|
+
rack (>= 1.0)
|
63
|
+
rails (4.2.5.1)
|
64
|
+
actionmailer (= 4.2.5.1)
|
65
|
+
actionpack (= 4.2.5.1)
|
66
|
+
actionview (= 4.2.5.1)
|
67
|
+
activejob (= 4.2.5.1)
|
68
|
+
activemodel (= 4.2.5.1)
|
69
|
+
activerecord (= 4.2.5.1)
|
70
|
+
activesupport (= 4.2.5.1)
|
71
|
+
bundler (>= 1.3.0, < 2.0)
|
72
|
+
railties (= 4.2.5.1)
|
73
|
+
sprockets-rails
|
74
|
+
rails-api (0.4.0)
|
75
|
+
actionpack (>= 3.2.11)
|
76
|
+
railties (>= 3.2.11)
|
77
|
+
rails-deprecated_sanitizer (1.0.3)
|
78
|
+
activesupport (>= 4.2.0.alpha)
|
79
|
+
rails-dom-testing (1.0.7)
|
80
|
+
activesupport (>= 4.2.0.beta, < 5.0)
|
81
|
+
nokogiri (~> 1.6.0)
|
82
|
+
rails-deprecated_sanitizer (>= 1.0.1)
|
83
|
+
rails-html-sanitizer (1.0.3)
|
84
|
+
loofah (~> 2.0)
|
85
|
+
railties (4.2.5.1)
|
86
|
+
actionpack (= 4.2.5.1)
|
87
|
+
activesupport (= 4.2.5.1)
|
88
|
+
rake (>= 0.8.7)
|
89
|
+
thor (>= 0.18.1, < 2.0)
|
90
|
+
rake (10.5.0)
|
91
|
+
sprockets (3.5.2)
|
92
|
+
concurrent-ruby (~> 1.0)
|
93
|
+
rack (> 1, < 3)
|
94
|
+
sprockets-rails (3.0.1)
|
95
|
+
actionpack (>= 4.0)
|
96
|
+
activesupport (>= 4.0)
|
97
|
+
sprockets (>= 3.0.0)
|
98
|
+
thor (0.19.1)
|
99
|
+
thread_safe (0.3.5-java)
|
100
|
+
tzinfo (1.2.2)
|
101
|
+
thread_safe (~> 0.1)
|
102
|
+
|
103
|
+
PLATFORMS
|
104
|
+
java
|
105
|
+
|
106
|
+
DEPENDENCIES
|
107
|
+
activerecord-jdbcpostgresql-adapter (= 1.3.19)
|
108
|
+
rails (~> 4.2)
|
109
|
+
rails-api (= 0.4.0)
|
110
|
+
|
111
|
+
BUNDLED WITH
|
112
|
+
1.11.2
|
@@ -10,7 +10,8 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.description = ""
|
11
11
|
s.email = ["nick@nicksieger.com"]
|
12
12
|
s.executables = ["sample_jar"]
|
13
|
-
s.
|
13
|
+
s.bindir = 'sbin'
|
14
|
+
s.files = ["History.txt", "Rakefile", "README.txt", "sample_jar.gemspec", "bin/sample_jar", "sbin/sample_jar", "lib/sample_jar.rb", "test/test_sample_jar.rb"]
|
14
15
|
s.homepage = ""
|
15
16
|
s.require_paths = ["lib"]
|
16
17
|
s.rubygems_version = "1.8.15"
|
data/spec/warbler/jar_spec.rb
CHANGED
@@ -149,7 +149,7 @@ describe Warbler::Jar do
|
|
149
149
|
it "loads the default executable in main.rb" do
|
150
150
|
jar.apply(config)
|
151
151
|
contents = jar.contents('META-INF/main.rb')
|
152
|
-
contents.should
|
152
|
+
contents.should == "load 'sample_jar/sbin/sample_jar'"
|
153
153
|
end
|
154
154
|
|
155
155
|
it "includes compiled .rb and .class files" do
|
data/warbler.gemspec
CHANGED
@@ -15,7 +15,11 @@ Gem::Specification.new do |gem|
|
|
15
15
|
Rails, or Rack application. Warbler provides a minimal, flexible, Ruby-like way to
|
16
16
|
bundle up all of your application files for deployment to a Java environment.}
|
17
17
|
|
18
|
-
gem.files = `git ls-files`.split("\n")
|
18
|
+
gem.files = `git ls-files`.split("\n").
|
19
|
+
reject { |file| file =~ /^\./ }. # .gitignore, .travis.yml
|
20
|
+
reject { |file| file =~ /^spec|test\// }. # spec/**/*.spec
|
21
|
+
reject { |file| file =~ /^integration\// }. # (un-used) *.rake files
|
22
|
+
reject { |file| file =~ /^rakelib\// } # (un-used) *.rake files
|
19
23
|
gem.test_files = `git ls-files -- {test,spec,features,integration}/*`.split("\n")
|
20
24
|
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
25
|
gem.require_paths = ["lib"]
|
data/web.xml.erb
CHANGED
@@ -15,8 +15,8 @@
|
|
15
15
|
|
16
16
|
<%- if webxml.respond_to?(:servlet_filter) -%>
|
17
17
|
<filter>
|
18
|
-
<filter-class><%= webxml.servlet_filter %></filter-class>
|
19
18
|
<filter-name><%= webxml.servlet_filter_name %></filter-name>
|
19
|
+
<filter-class><%= webxml.servlet_filter %></filter-class>
|
20
20
|
<async-supported><%= !! webxml.servlet_filter_async %></async-supported>
|
21
21
|
</filter>
|
22
22
|
<filter-mapping>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: warbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sieger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,8 +116,6 @@ executables:
|
|
116
116
|
extensions: []
|
117
117
|
extra_rdoc_files: []
|
118
118
|
files:
|
119
|
-
- ".gitignore"
|
120
|
-
- ".travis.yml"
|
121
119
|
- Gemfile
|
122
120
|
- History.txt
|
123
121
|
- LICENSE.txt
|
@@ -642,6 +640,7 @@ files:
|
|
642
640
|
- spec/sample_jar/bin/sample_jar
|
643
641
|
- spec/sample_jar/lib/sample_jar.rb
|
644
642
|
- spec/sample_jar/sample_jar.gemspec
|
643
|
+
- spec/sample_jar/sbin/sample_jar
|
645
644
|
- spec/sample_jar/test/test_sample_jar.rb
|
646
645
|
- spec/sample_jbundler/.jbundler/classpath.rb
|
647
646
|
- spec/sample_jbundler/Gemfile
|
@@ -1213,6 +1212,7 @@ test_files:
|
|
1213
1212
|
- spec/sample_jar/bin/sample_jar
|
1214
1213
|
- spec/sample_jar/lib/sample_jar.rb
|
1215
1214
|
- spec/sample_jar/sample_jar.gemspec
|
1215
|
+
- spec/sample_jar/sbin/sample_jar
|
1216
1216
|
- spec/sample_jar/test/test_sample_jar.rb
|
1217
1217
|
- spec/sample_jbundler/.jbundler/classpath.rb
|
1218
1218
|
- spec/sample_jbundler/Gemfile
|
data/.gitignore
DELETED
data/.travis.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
rvm:
|
2
|
-
- jruby-9.0.5.0
|
3
|
-
- jruby-9.1.0.0
|
4
|
-
branches:
|
5
|
-
only:
|
6
|
-
- master
|
7
|
-
- /-dev|-feature|-fix/
|
8
|
-
env:
|
9
|
-
- JRUBY_OPTS="--server -Xcompile.invokedynamic=false"
|
10
|
-
matrix:
|
11
|
-
include:
|
12
|
-
- rvm: jruby-head
|
13
|
-
env: JRUBY_OPTS="--server -Xcompile.invokedynamic=false"
|
14
|
-
allow_failures:
|
15
|
-
- rvm: jruby-head
|
16
|
-
notifications:
|
17
|
-
irc:
|
18
|
-
channels:
|
19
|
-
- "irc.freenode.org#jruby"
|
20
|
-
on_success: change
|
21
|
-
on_failure: always
|
22
|
-
template:
|
23
|
-
- "%{repository} (%{branch}:%{commit} by %{author}): %{message} (%{build_url})"
|
24
|
-
before_install:
|
25
|
-
- sudo apt-get update && sudo apt-get install git
|
26
|
-
- git fetch --unshallow
|
27
|
-
- gem install bundler
|