warbler 1.4.3 → 1.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +11 -0
- data/README.rdoc +1 -1
- data/ext/WarMain.java +11 -8
- data/integration/pom.xml +3 -6
- data/lib/warbler/config.rb +5 -0
- data/lib/warbler/jar.rb +75 -13
- data/lib/warbler/traits.rb +5 -0
- data/lib/warbler/traits/jar.rb +1 -2
- data/lib/warbler/traits/jbundler.rb +4 -5
- data/lib/warbler/traits/war.rb +18 -7
- data/lib/warbler/version.rb +1 -1
- data/lib/warbler_jar.jar +0 -0
- data/pom.xml +1 -1
- data/spec/spec_helper.rb +3 -3
- data/spec/warbler/application_spec.rb +4 -4
- data/spec/warbler/bundler_spec.rb +9 -3
- data/spec/warbler/config_spec.rb +2 -2
- data/spec/warbler/jar_spec.rb +59 -2
- data/spec/warbler/jbundler_spec.rb +1 -1
- data/spec/warbler/task_spec.rb +12 -12
- data/warble.rb +10 -3
- data/warbler.gemspec +4 -6
- data/web.xml.erb +2 -0
- metadata +8 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98d05a82e2e4f5ccfc47ffc014a1b4baf1872510
|
4
|
+
data.tar.gz: 27f3d80a4e3231a1120e72a13173ebcd2cc7ce64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b220ad7086cb9ceef5db6e1fc80d863e150bf0e8d6e0a5aa9cfd5b26c225f0e036a73dbb6bee9c6e774535e79c0b9112fc8a1a1e054057b9059d5831f253c67
|
7
|
+
data.tar.gz: 02e5f1796a08654fe5416e20a95f5e87abef27bf3d77870dbec64233e06864ed96fd9f880d0e0184d399fa962cfa49818691d524e4da0cec2e85f99a56c0408f
|
data/History.txt
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== 1.4.4
|
2
|
+
- #271: LoadError while excute rake command with runnable .war archive
|
3
|
+
- #273: filtering support with `config.move_jars_to_webinf_lib`
|
4
|
+
- #270: don't swallow compiler errors with backticks
|
5
|
+
- #265: Compile feature only compiles application sources (not gems)
|
6
|
+
- #264: JBundler with compiled feature crashes with java.lang.ClassNotFoundException: org.jruby.Main
|
7
|
+
- #269: Argument list too long
|
8
|
+
- #236: Adds comment hinting at how to put a display name in web.xml.erb file.
|
9
|
+
- #275: for jruby-1.7.13 we do not want to force load bouncy-castle jars
|
10
|
+
- #276: unnecessary rubyzip dependency on "< 1.1"
|
11
|
+
|
1
12
|
== 1.4.3
|
2
13
|
- Fixed a bug w/ symlinks that was introduced around jruby-1.7.10
|
3
14
|
- #258: Bytecode version option for compiled class files
|
data/README.rdoc
CHANGED
@@ -238,7 +238,7 @@ itself continues to support Ruby 1.8. However, many gems are choosing
|
|
238
238
|
to drop 1.8 support; one of these gems is
|
239
239
|
{rubyzip}(https://github.com/rubyzip/rubyzip), which Warbler relies
|
240
240
|
on. If you need to use Warbler in a 1.8 environment, you will need to
|
241
|
-
lock the
|
241
|
+
lock the <tt>rubyzip</tt> gem to a version before 1.0.0.
|
242
242
|
|
243
243
|
== Troubleshooting
|
244
244
|
|
data/ext/WarMain.java
CHANGED
@@ -308,10 +308,18 @@ public class WarMain extends JarMain {
|
|
308
308
|
|
309
309
|
protected void initJRubyScriptingEnv(Object scriptingContainer, final URL[] jars) throws Exception {
|
310
310
|
String jrubyStdlibJar = "";
|
311
|
+
String bcpkixJar = "";
|
312
|
+
String bcprovJar = "";
|
311
313
|
for (URL url : jars) {
|
312
314
|
if (url.toString().matches("file:/.*jruby-stdlib-.*jar")) {
|
313
315
|
jrubyStdlibJar = url.toString();
|
314
316
|
debug("using jruby-stdlib: " + jrubyStdlibJar);
|
317
|
+
} else if (url.toString().matches("file:/.*bcpkix-jdk15on-.*jar")) {
|
318
|
+
bcpkixJar = url.toString();
|
319
|
+
debug("using bcpkix: " + bcpkixJar);
|
320
|
+
} else if (url.toString().matches("file:/.*bcprov-jdk15on-.*jar")) {
|
321
|
+
bcprovJar = url.toString();
|
322
|
+
debug("using bcprov: " + bcprovJar);
|
315
323
|
}
|
316
324
|
}
|
317
325
|
|
@@ -322,14 +330,9 @@ public class WarMain extends JarMain {
|
|
322
330
|
"$: << \"" + jrubyStdlibJar + "!/META-INF/jruby.home/lib/ruby/#{ruby}/site_ruby\"\n" +
|
323
331
|
"$: << \"" + jrubyStdlibJar + "!/META-INF/jruby.home/lib/ruby/shared\"\n" +
|
324
332
|
"$: << \"" + jrubyStdlibJar + "!/META-INF/jruby.home/lib/ruby/#{ruby}\"\n" +
|
325
|
-
"if jruby_major_version >= 1.7\n" +
|
326
|
-
"
|
327
|
-
"
|
328
|
-
" require 'bcprov-jdk15on-1.47.jar'\n" +
|
329
|
-
" else\n" +
|
330
|
-
" require 'bcpkix-jdk15on-147.jar'\n" +
|
331
|
-
" require 'bcprov-jdk15on-147.jar'\n" +
|
332
|
-
" end\n" +
|
333
|
+
"if jruby_major_version >= 1.7 and jruby_minor_version < 13\n" +
|
334
|
+
" require \"" + bcpkixJar + "\".gsub('file:', '') unless \"" + bcpkixJar + "\".empty?\n" +
|
335
|
+
" require \"" + bcprovJar + "\".gsub('file:', '') unless \"" + bcprovJar + "\".empty?\n" +
|
333
336
|
"end");
|
334
337
|
|
335
338
|
invokeMethod(scriptingContainer, "setHomeDirectory", "classpath:/META-INF/jruby.home");
|
data/integration/pom.xml
CHANGED
@@ -18,9 +18,9 @@
|
|
18
18
|
<properties>
|
19
19
|
<version.jruby-maven-plugins>1.0.0-rc</version.jruby-maven-plugins>
|
20
20
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
21
|
-
<jruby.version>1.7.
|
21
|
+
<jruby.version>1.7.13</jruby.version>
|
22
22
|
<!-- prereleased gems ARE snapshots -->
|
23
|
-
<warbler.version>1.4.
|
23
|
+
<warbler.version>1.4.4-SNAPSHOT</warbler.version>
|
24
24
|
<gem.home>${session.executionRootDirectory}/target/rubygems</gem.home>
|
25
25
|
<gem.path>${session.executionRootDirectory}/target/rubygems</gem.path>
|
26
26
|
</properties>
|
@@ -146,16 +146,13 @@
|
|
146
146
|
<jrubyVersion>${jruby.version}</jrubyVersion>
|
147
147
|
</configuration>
|
148
148
|
<executions>
|
149
|
-
|
150
149
|
<execution>
|
151
150
|
<id>bundle-install</id>
|
152
|
-
|
153
|
-
<goals><goal>jruby</goal></goals>
|
151
|
+
<goals><goal>jruby</goal></goals>
|
154
152
|
<configuration>
|
155
153
|
<args>-C ${basedir}/src/main/ruby -S ${gem.home}/bin/bundle install</args>
|
156
154
|
</configuration>
|
157
155
|
</execution>
|
158
|
-
|
159
156
|
<execution>
|
160
157
|
<id>create-war</id>
|
161
158
|
<goals><goal>jruby</goal></goals>
|
data/lib/warbler/config.rb
CHANGED
@@ -116,6 +116,10 @@ module Warbler
|
|
116
116
|
# compile all .rb files in the application.
|
117
117
|
attr_accessor :compiled_ruby_files
|
118
118
|
|
119
|
+
# Determines if ruby files in supporting gems will be compiled.
|
120
|
+
# Ignored unless compile feature is used.
|
121
|
+
attr_accessor :compile_gems
|
122
|
+
|
119
123
|
# Warbler writes an "init" file into the war at this location. JRuby-Rack and possibly other
|
120
124
|
# launchers may use this to initialize the Ruby environment.
|
121
125
|
attr_accessor :init_filename
|
@@ -204,6 +208,7 @@ module Warbler
|
|
204
208
|
@script_files = []
|
205
209
|
@warbler_scripts = "#{WARBLER_HOME}/lib/warbler/scripts"
|
206
210
|
@move_jars_to_webinf_lib = false
|
211
|
+
@compile_gems = false
|
207
212
|
|
208
213
|
before_configure
|
209
214
|
yield self if block_given?
|
data/lib/warbler/jar.rb
CHANGED
@@ -36,13 +36,20 @@ module Warbler
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def compile(config)
|
39
|
+
find_gems_files(config)
|
39
40
|
# Compiling all Ruby files we can find -- do we need to allow an
|
40
41
|
# option to configure what gets compiled?
|
41
|
-
return if config.compiled_ruby_files.nil? || config.compiled_ruby_files.empty?
|
42
|
+
return if (config.compiled_ruby_files.nil? || config.compiled_ruby_files.empty?) && files.empty?
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
if config.compile_gems
|
45
|
+
ruby_files = gather_all_rb_files(config)
|
46
|
+
run_javac(config, ruby_files.values)
|
47
|
+
replace_compiled_ruby_files_and_gems(config, ruby_files)
|
48
|
+
else
|
49
|
+
compiled_ruby_files = config.compiled_ruby_files - config.excludes.to_a
|
50
|
+
run_javac(config, compiled_ruby_files)
|
51
|
+
replace_compiled_ruby_files(config, compiled_ruby_files)
|
52
|
+
end
|
46
53
|
end
|
47
54
|
|
48
55
|
def run_javac(config, compiled_ruby_files)
|
@@ -51,16 +58,20 @@ module Warbler
|
|
51
58
|
else
|
52
59
|
compat_version = ''
|
53
60
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
61
|
+
|
62
|
+
compiled_ruby_files.each_slice(2500) do |slice|
|
63
|
+
# Need to use the version of JRuby in the application to compile it
|
64
|
+
javac_cmd = %Q{java -classpath #{config.java_libs.join(File::PATH_SEPARATOR)} #{java_version(config)} org.jruby.Main #{compat_version} -S jrubyc \"#{slice.join('" "')}\"}
|
65
|
+
if which('env')
|
66
|
+
system %Q{env -i #{javac_cmd}}
|
67
|
+
else
|
68
|
+
system javac_cmd
|
69
|
+
end
|
70
|
+
raise "Compile failed" if $?.exitstatus > 0
|
60
71
|
end
|
61
|
-
|
72
|
+
@compiled = true
|
62
73
|
end
|
63
|
-
|
74
|
+
|
64
75
|
def java_version(config)
|
65
76
|
config.bytecode_version ? "-Djava.specification.version=#{config.bytecode_version}" : ''
|
66
77
|
end
|
@@ -75,6 +86,55 @@ module Warbler
|
|
75
86
|
end
|
76
87
|
end
|
77
88
|
|
89
|
+
def replace_compiled_ruby_files_and_gems(config, compiled_ruby_files)
|
90
|
+
# Exclude the rb files and recreate them. This
|
91
|
+
# prevents the original contents being used.
|
92
|
+
config.excludes += compiled_ruby_files.keys
|
93
|
+
|
94
|
+
compiled_ruby_files.each do |inside_jar, file_system_location|
|
95
|
+
# The gems are already inside the gems folder inside the jar, however when using the :gems pathmap, they will
|
96
|
+
# get put into the gems/gems folder, to prevent this we chop off the first gems folder directory
|
97
|
+
inside_jar = inside_jar.dup
|
98
|
+
if inside_jar.split(File::SEPARATOR).first == 'gems'
|
99
|
+
inside_jar = inside_jar.split(File::SEPARATOR)[1..-1].join(File::SEPARATOR)
|
100
|
+
pathmap = :gems
|
101
|
+
else
|
102
|
+
pathmap = :application
|
103
|
+
end
|
104
|
+
files[apply_pathmaps(config, inside_jar, pathmap)] = StringIO.new("load __FILE__.sub(/\.rb$/, '.class')")
|
105
|
+
files[apply_pathmaps(config, inside_jar.sub(/\.rb$/, '.class'), pathmap)] = file_system_location.sub(/\.rb$/, '.class')
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
#
|
110
|
+
def gather_all_rb_files(config)
|
111
|
+
FileUtils.mkdir_p('tmp')
|
112
|
+
# Gather all the files in the files list and copy them to the tmp directory
|
113
|
+
gems_to_compile = files.select {|k, f| !f.is_a?(StringIO) && f =~ /\.rb$/ }
|
114
|
+
# 1.8.7 Support, convert back to hash
|
115
|
+
if gems_to_compile.is_a?(Array)
|
116
|
+
gems_to_compile = gems_to_compile.inject({}) {|h,z| h.merge!(z[0] => z[1]) }
|
117
|
+
end
|
118
|
+
gems_to_compile.each do |jar_file, rb|
|
119
|
+
FileUtils.mkdir_p(File.dirname(File.join('tmp', jar_file)))
|
120
|
+
new_rb = File.join('tmp', jar_file)
|
121
|
+
FileUtils.copy(rb, new_rb)
|
122
|
+
gems_to_compile[jar_file] = new_rb
|
123
|
+
end
|
124
|
+
# Gather all the application files which the user wrote (not dependencies)
|
125
|
+
main_files_to_compile = config.compiled_ruby_files - config.excludes.to_a
|
126
|
+
main_files_to_compile.each do |f|
|
127
|
+
FileUtils.mkdir_p(File.dirname(File.join('tmp', f)))
|
128
|
+
FileUtils.copy(f, File.join('tmp', f))
|
129
|
+
end
|
130
|
+
main_files_to_compile = main_files_to_compile.inject({}) {|h,f| h.merge!(f => f) }
|
131
|
+
files.keys.each do |k|
|
132
|
+
# Update files list to point to the temporary file
|
133
|
+
files[k] = gems_to_compile[k] || main_files_to_compile[k] || files[k]
|
134
|
+
end
|
135
|
+
main_files_to_compile.merge(gems_to_compile)
|
136
|
+
end
|
137
|
+
|
78
138
|
# Apply the information in a Warbler::Config object in order to
|
79
139
|
# look for files to put into this war file.
|
80
140
|
def apply(config)
|
@@ -133,7 +193,9 @@ module Warbler
|
|
133
193
|
|
134
194
|
# Add gems to WEB-INF/gems
|
135
195
|
def find_gems_files(config)
|
136
|
-
|
196
|
+
unless @compiled and config.compile_gems
|
197
|
+
config.gems.specs(config.gem_dependencies).each {|spec| find_single_gem_files(config, spec) }
|
198
|
+
end
|
137
199
|
end
|
138
200
|
|
139
201
|
# Add a single gem to WEB-INF/gems
|
data/lib/warbler/traits.rb
CHANGED
data/lib/warbler/traits/jar.rb
CHANGED
@@ -37,11 +37,10 @@ module Warbler
|
|
37
37
|
else
|
38
38
|
raise 'jbundler support needs jruby to create a local config: jruby -S jbundle install'
|
39
39
|
end
|
40
|
-
# use only the jars from jbundler
|
41
|
-
config.java_libs
|
42
|
-
|
43
|
-
|
44
|
-
end
|
40
|
+
# use only the jars from jbundler and jruby
|
41
|
+
config.java_libs += jruby_jars
|
42
|
+
config.java_libs += JBUNDLER_CLASSPATH
|
43
|
+
config.java_libs.uniq! {|lib| lib.split(File::SEPARATOR).last }
|
45
44
|
config.init_contents << "#{config.warbler_templates}/jbundler.erb"
|
46
45
|
end
|
47
46
|
end
|
data/lib/warbler/traits/war.rb
CHANGED
@@ -76,7 +76,7 @@ module Warbler
|
|
76
76
|
def update_archive(jar)
|
77
77
|
add_public_files(jar)
|
78
78
|
add_webxml(jar)
|
79
|
-
move_jars_to_webinf_lib(jar
|
79
|
+
move_jars_to_webinf_lib(jar, config.move_jars_to_webinf_lib)
|
80
80
|
add_runnables(jar) if config.features.include?("runnable")
|
81
81
|
add_executables(jar) if config.features.include?("executable")
|
82
82
|
add_gemjar(jar) if config.features.include?("gemjar")
|
@@ -110,7 +110,7 @@ module Warbler
|
|
110
110
|
jar.files["#{klass}.class"] = jar.entry_in_jar(WARBLER_JAR, "#{klass}.class")
|
111
111
|
end
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
def add_executables(jar)
|
115
115
|
webserver = WEB_SERVERS[config.webserver.to_s]
|
116
116
|
webserver.add(jar)
|
@@ -131,10 +131,21 @@ module Warbler
|
|
131
131
|
gem_jar.create("tmp/gems.jar")
|
132
132
|
end
|
133
133
|
|
134
|
-
def move_jars_to_webinf_lib(jar)
|
135
|
-
|
136
|
-
|
137
|
-
|
134
|
+
def move_jars_to_webinf_lib(jar, selector = nil)
|
135
|
+
return unless selector # default is false
|
136
|
+
selector = /.*/ if selector == true # move all if not a RegExp given
|
137
|
+
default_jars = default_jar_files.map { |file| File.basename(file) }
|
138
|
+
jar.files.keys.select { |k| k =~ /^WEB-INF\/.*\.jar$/ }.each do |k|
|
139
|
+
if k.start_with?('WEB-INF/lib/') # .jar already in WEB-INF/lib
|
140
|
+
if default_jars.include? k.sub('WEB-INF/lib/', '')
|
141
|
+
# exclude default jar (if it's not matched by selector) :
|
142
|
+
jar.files.delete(k) unless selector =~ File.basename(k)
|
143
|
+
end
|
144
|
+
next
|
145
|
+
end
|
146
|
+
next unless selector =~ File.basename(k)
|
147
|
+
name = k.sub('WEB-INF', '')[1..-1].gsub(/[\/\\]/, '-')
|
148
|
+
jar.files["WEB-INF/lib/#{name}"] = jar.files[k]
|
138
149
|
jar.files[k] = empty_jar
|
139
150
|
end
|
140
151
|
end
|
@@ -155,7 +166,7 @@ module Warbler
|
|
155
166
|
|
156
167
|
# Helper class for holding arbitrary config.webxml values for injecting into +web.xml+.
|
157
168
|
class WebxmlOpenStruct < OpenStruct
|
158
|
-
|
169
|
+
|
159
170
|
%w(java com org javax gem).each do |name|
|
160
171
|
class_eval "def #{name}; method_missing(:#{name}); end"
|
161
172
|
end
|
data/lib/warbler/version.rb
CHANGED
data/lib/warbler_jar.jar
CHANGED
Binary file
|
data/pom.xml
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
<modelVersion>4.0.0</modelVersion>
|
5
5
|
<groupId>rubygems</groupId>
|
6
6
|
<artifactId>warbler</artifactId>
|
7
|
-
<version>1.4.
|
7
|
+
<version>1.4.4-SNAPSHOT</version>
|
8
8
|
<packaging>gem</packaging>
|
9
9
|
<name>Warbler chirpily constructs .war files of your Rails applications.</name>
|
10
10
|
<description>Warbler is a gem to make a Java jar or war file out of any Ruby,
|
data/spec/spec_helper.rb
CHANGED
@@ -75,7 +75,7 @@ module ExampleGroupHelpers
|
|
75
75
|
|
76
76
|
def cleanup_temp_files(*except_files)
|
77
77
|
after(:each) do
|
78
|
-
FileUtils.rm_rf FileList[*(["log", ".bundle", "tmp
|
78
|
+
FileUtils.rm_rf FileList[*(["log", ".bundle", "tmp"] - except_files)]
|
79
79
|
FileUtils.rm_f FileList[*(["*.war", "*.foobar", "**/config.ru", "*web.xml*", "config/web.xml*",
|
80
80
|
"config/warble.rb", "file.txt", 'manifest', '*Gemfile*', 'MANIFEST.MF*', 'init.rb*',
|
81
81
|
'**/*.class'] - except_files)]
|
@@ -94,7 +94,7 @@ module ExampleGroupHelpers
|
|
94
94
|
ready, error = nil, nil
|
95
95
|
300.times do # timeout 30 secs (300 * 0.1)
|
96
96
|
begin
|
97
|
-
break if ready = drbclient.ready?
|
97
|
+
break if ready = drbclient.ready?
|
98
98
|
rescue DRb::DRbConnError => e
|
99
99
|
error = e; sleep 0.1
|
100
100
|
end
|
@@ -134,7 +134,7 @@ module ExampleGroupHelpers
|
|
134
134
|
before :each do
|
135
135
|
webserver = double('server').as_null_object
|
136
136
|
webserver.stub(:main_class).and_return 'WarMain.class'
|
137
|
-
webserver.stub(:add)
|
137
|
+
webserver.stub(:add) do |jar|
|
138
138
|
jar.files['WEB-INF/webserver.jar'] = StringIO.new
|
139
139
|
end
|
140
140
|
Warbler::WEB_SERVERS['test'] = webserver
|
@@ -45,10 +45,10 @@ describe Warbler::Application do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should copy a fresh config file into place" do
|
48
|
-
File.exists?("config/warble.rb").should_not
|
48
|
+
File.exists?("config/warble.rb").should_not be true
|
49
49
|
ARGV.unshift "config"
|
50
50
|
silence { Warbler::Application.new.run }
|
51
|
-
File.exists?("config/warble.rb").should
|
51
|
+
File.exists?("config/warble.rb").should be true
|
52
52
|
end
|
53
53
|
|
54
54
|
it "should refuse to copy over an existing config file" do
|
@@ -71,13 +71,13 @@ describe Warbler::Application do
|
|
71
71
|
mkdir_p "lib/tasks/warbler"
|
72
72
|
ARGV.unshift "pluginize"
|
73
73
|
silence { Warbler::Application.new.run }
|
74
|
-
File.exist?("lib/tasks/warbler/warbler.rake").should_not
|
74
|
+
File.exist?("lib/tasks/warbler/warbler.rake").should_not be true
|
75
75
|
end
|
76
76
|
|
77
77
|
it "should define a pluginize task for adding the tasks to a Rails application" do
|
78
78
|
ARGV.unshift "pluginize"
|
79
79
|
silence { Warbler::Application.new.run }
|
80
|
-
File.exist?("lib/tasks/warbler/warbler.rake").should
|
80
|
+
File.exist?("lib/tasks/warbler/warbler.rake").should be true
|
81
81
|
end
|
82
82
|
|
83
83
|
it "should provide a means to load the project Rakefile" do
|
@@ -6,6 +6,7 @@
|
|
6
6
|
#++
|
7
7
|
|
8
8
|
require File.expand_path('../../spec_helper', __FILE__)
|
9
|
+
require 'open3'
|
9
10
|
|
10
11
|
describe Warbler::Jar, "with Bundler" do
|
11
12
|
use_fresh_rake_application
|
@@ -79,8 +80,13 @@ describe Warbler::Jar, "with Bundler" do
|
|
79
80
|
end
|
80
81
|
jar.apply(config)
|
81
82
|
jar.create('foo.war')
|
82
|
-
|
83
|
-
|
83
|
+
if RUBY_VERSION >= '1.9'
|
84
|
+
stdin, stdout, stderr, wait_thr = Open3.popen3('java -jar foo.war -S rake -T')
|
85
|
+
wait_thr.value.success?.should be(true), stderr.readlines.join
|
86
|
+
else
|
87
|
+
`java -jar foo.war -S rake -T`
|
88
|
+
$?.exitstatus.should == 0
|
89
|
+
end
|
84
90
|
end
|
85
91
|
end
|
86
92
|
|
@@ -156,7 +162,7 @@ describe Warbler::Jar, "with Bundler" do
|
|
156
162
|
|
157
163
|
it "includes the bundler gem" do
|
158
164
|
jar.apply(config)
|
159
|
-
config.gems.detect{|k,v| k.name == 'bundler'}.should_not
|
165
|
+
config.gems.detect{|k,v| k.name == 'bundler'}.should_not be nil
|
160
166
|
file_list(/bundler-/).should_not be_empty
|
161
167
|
end
|
162
168
|
|
data/spec/warbler/config_spec.rb
CHANGED
@@ -23,7 +23,7 @@ describe Warbler::Config do
|
|
23
23
|
config = Warbler::Config.new
|
24
24
|
config.includes.should be_empty
|
25
25
|
config.jar_name.size.should > 0
|
26
|
-
config.override_gem_home.should
|
26
|
+
config.override_gem_home.should be true
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -43,7 +43,7 @@ describe Warbler::Config do
|
|
43
43
|
config.webxml.should be_kind_of(OpenStruct)
|
44
44
|
config.pathmaps.should be_kind_of(OpenStruct)
|
45
45
|
config.pathmaps.public_html.should == ["%{public/,}p"]
|
46
|
-
config.override_gem_home.should
|
46
|
+
config.override_gem_home.should be true
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should allow configuration through an initializer block" do
|
data/spec/warbler/jar_spec.rb
CHANGED
@@ -176,6 +176,34 @@ describe Warbler::Jar do
|
|
176
176
|
file_list(%r{^sample_jar/lib/sample_jar\.class$}).should be_empty
|
177
177
|
jar.contents('sample_jar/lib/sample_jar.rb').should_not =~ /load __FILE__\.sub/
|
178
178
|
end
|
179
|
+
|
180
|
+
it "compiles included gems when compile_gems is true" do
|
181
|
+
config.compile_gems = true
|
182
|
+
config.compiled_ruby_files = %w(lib/sample_jar.rb)
|
183
|
+
jar.compile(config)
|
184
|
+
jar.apply(config)
|
185
|
+
file_list(%r{sample_jar.*\.rb$}).size.should == 2
|
186
|
+
if RUBY_VERSION >= '1.9'
|
187
|
+
file_list(%r{gems.*\.class$}).size.should == 73
|
188
|
+
else
|
189
|
+
# 1.8.7 uses an older version of rubyzip and so the number of files compiled changes
|
190
|
+
file_list(%r{gems.*\.class$}).size.should == 32
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
it "does not compile included gems by default" do
|
195
|
+
config.compiled_ruby_files = %w(lib/sample_jar.rb)
|
196
|
+
jar.compile(config)
|
197
|
+
jar.apply(config)
|
198
|
+
file_list(%r{sample_jar.*\.rb$}).size.should == 2
|
199
|
+
if RUBY_VERSION >= '1.9'
|
200
|
+
file_list(%r{gems.*\.class$}).size.should == 0
|
201
|
+
else
|
202
|
+
# 1.8.7 uses an older version of rubyzip and so the number of files compiled changes
|
203
|
+
file_list(%r{gems.*\.class$}).size.should == 0
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
179
207
|
end
|
180
208
|
|
181
209
|
context "with a gemspec without a default executable" do
|
@@ -443,7 +471,7 @@ describe Warbler::Jar do
|
|
443
471
|
mkdir_p "config"
|
444
472
|
File.open("config/web.xml.erb", "w") {|f| f << "Hi <%= webxml.public.root %>" }
|
445
473
|
jar.apply(config)
|
446
|
-
jar.files["WEB-INF/web.xml"].should_not
|
474
|
+
jar.files["WEB-INF/web.xml"].should_not be nil
|
447
475
|
jar.files["WEB-INF/web.xml"].read.should == "Hi /"
|
448
476
|
end
|
449
477
|
|
@@ -594,6 +622,36 @@ describe Warbler::Jar do
|
|
594
622
|
file_list(%r{WEB-INF/app/sample.jar}).should_not be_empty
|
595
623
|
end
|
596
624
|
end
|
625
|
+
|
626
|
+
context "with move_jars_to_webinf_lib set to regexp" do
|
627
|
+
before :each do
|
628
|
+
use_config do |config|
|
629
|
+
config.move_jars_to_webinf_lib = /sample/
|
630
|
+
end
|
631
|
+
end
|
632
|
+
|
633
|
+
before :each do
|
634
|
+
touch FileList["app/another.jar", "app/sample2.jar"]
|
635
|
+
end
|
636
|
+
after :each do
|
637
|
+
rm_f FileList["app/another.jar", "app/sample2.jar"]
|
638
|
+
end
|
639
|
+
|
640
|
+
it "moves jar files that match to WEB-INF/lib" do
|
641
|
+
jar.apply(config)
|
642
|
+
file_list(%r{WEB-INF/lib/app-sample.jar}).should_not be_empty
|
643
|
+
file_list(%r{WEB-INF/lib/app-sample2.jar}).should_not be_empty
|
644
|
+
file_list(%r{WEB-INF/lib/.*?another.jar}).should be_empty
|
645
|
+
end
|
646
|
+
|
647
|
+
it "removes default jars not matched by filter from WEB-INF/lib" do
|
648
|
+
jar.apply(config)
|
649
|
+
file_list(%r{WEB-INF/lib/jruby-rack.*\.jar}).should be_empty
|
650
|
+
file_list(%r{WEB-INF/lib/jruby-core.*\.jar}).should be_empty
|
651
|
+
end
|
652
|
+
|
653
|
+
end
|
654
|
+
|
597
655
|
end
|
598
656
|
|
599
657
|
context "with the executable feature" do
|
@@ -995,4 +1053,3 @@ describe Warbler::Jar do
|
|
995
1053
|
end
|
996
1054
|
end
|
997
1055
|
end
|
998
|
-
|
@@ -70,7 +70,7 @@ describe Warbler::Jar, "with JBundler" do
|
|
70
70
|
it "does not include the jbundler gem (as it is in the development group)" do
|
71
71
|
pending( "needs JRuby to work" ) unless defined? JRUBY_VERSION
|
72
72
|
jar.apply(config)
|
73
|
-
config.gems.detect{|k,v| k.name == 'jbundler'}.should
|
73
|
+
config.gems.detect{|k,v| k.name == 'jbundler'}.should be nil
|
74
74
|
file_list(/jbundler-/).should be_empty
|
75
75
|
end
|
76
76
|
|
data/spec/warbler/task_spec.rb
CHANGED
@@ -138,7 +138,7 @@ describe Warbler::Task do
|
|
138
138
|
class_file_bytes = zf.get_input_stream('WEB-INF/lib/ruby_one_nine.class') {|io| io.read }
|
139
139
|
java_class_header = class_file_bytes[0..3]
|
140
140
|
bytecode_version = class_file_bytes[6..7]
|
141
|
-
|
141
|
+
|
142
142
|
java_class_header.should == java_class_magic_number
|
143
143
|
bytecode_version.should == java6_version_bytes
|
144
144
|
end
|
@@ -147,13 +147,13 @@ describe Warbler::Task do
|
|
147
147
|
it "should delete .class files after finishing the jar" do
|
148
148
|
config.features << "compiled"
|
149
149
|
silence { run_task "warble" }
|
150
|
-
File.exist?('app/helpers/application_helper.class').should
|
150
|
+
File.exist?('app/helpers/application_helper.class').should be false
|
151
151
|
end
|
152
152
|
|
153
153
|
context "where symlinks are available" do
|
154
154
|
begin
|
155
155
|
FileUtils.ln_s "README.txt", "r.txt.symlink", :verbose => false
|
156
|
-
|
156
|
+
|
157
157
|
it "should process symlinks by storing a file in the archive that has the same contents as the source" do
|
158
158
|
File.open("config/special.txt", "wb") {|f| f << "special"}
|
159
159
|
Dir.chdir("config") { FileUtils.ln_s "special.txt", "link.txt" }
|
@@ -169,9 +169,9 @@ describe Warbler::Task do
|
|
169
169
|
Dir.chdir("lib") { FileUtils.ln_s "tasks", "rakelib" }
|
170
170
|
silence { run_task "warble" }
|
171
171
|
Warbler::ZipSupport.open("#{config.jar_name}.war") do |zf|
|
172
|
-
zf.find_entry("WEB-INF/lib/tasks/utils.rake").should_not
|
173
|
-
zf.find_entry("WEB-INF/lib/rakelib/").should_not
|
174
|
-
zf.find_entry("WEB-INF/lib/rakelib/utils.rake").should_not
|
172
|
+
zf.find_entry("WEB-INF/lib/tasks/utils.rake").should_not be nil
|
173
|
+
zf.find_entry("WEB-INF/lib/rakelib/").should_not be nil
|
174
|
+
zf.find_entry("WEB-INF/lib/rakelib/utils.rake").should_not be nil if defined?(JRUBY_VERSION)
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
@@ -181,7 +181,7 @@ describe Warbler::Task do
|
|
181
181
|
end
|
182
182
|
|
183
183
|
context "with a Bundler Gemfile" do
|
184
|
-
|
184
|
+
|
185
185
|
run_out_of_process_with_drb if DRB = true
|
186
186
|
|
187
187
|
after do
|
@@ -194,18 +194,18 @@ describe Warbler::Task do
|
|
194
194
|
|
195
195
|
it "includes gems from the Gemfile" do
|
196
196
|
File.open("Gemfile", "w") {|f| f << "gem 'rspec'"}
|
197
|
-
|
197
|
+
|
198
198
|
if DRB
|
199
199
|
drbclient.run_task "warble"
|
200
200
|
config = drbclient.config
|
201
201
|
else
|
202
|
-
silence { run_task "warble" }
|
202
|
+
silence { run_task "warble" }
|
203
203
|
end
|
204
|
-
|
204
|
+
|
205
205
|
Warbler::ZipSupport.open("#{config.jar_name}.war") do |zf|
|
206
206
|
rspec = config.gems.keys.detect { |spec| spec.name == 'rspec' }
|
207
|
-
rspec.should_not
|
208
|
-
zf.find_entry("WEB-INF/gems/specifications/rspec-#{rspec.version}.gemspec").should_not
|
207
|
+
rspec.should_not be(nil), "expected rspec gem among: #{config.gems.keys.join(' ')}"
|
208
|
+
zf.find_entry("WEB-INF/gems/specifications/rspec-#{rspec.version}.gemspec").should_not be nil
|
209
209
|
end
|
210
210
|
end
|
211
211
|
end
|
data/warble.rb
CHANGED
@@ -88,7 +88,11 @@ Warbler::Config.new do |config|
|
|
88
88
|
# files will be compiled. Default is to compile all \.rb files in
|
89
89
|
# the application.
|
90
90
|
# config.compiled_ruby_files = FileList['app/**/*.rb']
|
91
|
-
|
91
|
+
|
92
|
+
# Determines if ruby files in supporting gems will be compiled.
|
93
|
+
# Ignored unless compile feature is used.
|
94
|
+
# config.compile_gems = false
|
95
|
+
|
92
96
|
# When set it specify the bytecode version for compiled class files
|
93
97
|
# config.bytecode_version = "1.6"
|
94
98
|
|
@@ -97,15 +101,18 @@ Warbler::Config.new do |config|
|
|
97
101
|
# GEM_HOME if it is set.
|
98
102
|
# config.override_gem_home = true
|
99
103
|
|
100
|
-
# Allows for specifing custom executables
|
104
|
+
# Allows for specifing custom executables
|
101
105
|
# config.executable = ["rake", "bin/rake"]
|
102
|
-
|
106
|
+
|
103
107
|
# Sets default (prefixed) parameters for the executables
|
104
108
|
# config.executable_params = "do:something"
|
105
109
|
|
106
110
|
# If set to true, moves jar files into WEB-INF/lib. Prior to version 1.4.2 of Warbler this was done
|
107
111
|
# by default. But since 1.4.2 this config defaults to false. It may need to be set to true for
|
108
112
|
# web servers that do not explode the WAR file.
|
113
|
+
# Alternatively, this option can be set to a regular expression, which will
|
114
|
+
# act as a jar selector -- only jar files that match the pattern will be
|
115
|
+
# included in the archive.
|
109
116
|
# config.move_jars_to_webinf_lib = false
|
110
117
|
|
111
118
|
# === War files only below here ===
|
data/warbler.gemspec
CHANGED
@@ -6,15 +6,14 @@ Gem::Specification.new do |gem|
|
|
6
6
|
gem.name = "warbler"
|
7
7
|
gem.version = Warbler::VERSION
|
8
8
|
gem.platform = Gem::Platform::RUBY
|
9
|
-
gem.homepage = "
|
9
|
+
gem.homepage = "https://github.com/jruby/warbler"
|
10
10
|
gem.license = 'MIT'
|
11
11
|
gem.authors = ["Nick Sieger"]
|
12
12
|
gem.email = "nick@nicksieger.com"
|
13
13
|
gem.summary = "Warbler chirpily constructs .war files of your Rails applications."
|
14
14
|
gem.description = %q{Warbler is a gem to make a Java jar or war file out of any Ruby,
|
15
|
-
Rails,
|
16
|
-
|
17
|
-
deployment to a Java environment.}
|
15
|
+
Rails, or Rack application. Warbler provides a minimal, flexible, Ruby-like way to
|
16
|
+
bundle up all of your application files for deployment to a Java environment.}
|
18
17
|
|
19
18
|
gem.files = `git ls-files`.split("\n")
|
20
19
|
gem.test_files = `git ls-files -- {test,spec,features,integration}/*`.split("\n")
|
@@ -22,13 +21,12 @@ deployment to a Java environment.}
|
|
22
21
|
gem.require_paths = ["lib"]
|
23
22
|
|
24
23
|
gem.rdoc_options = ["--main", "README.rdoc", "-H", "-f", "darkfish"]
|
25
|
-
gem.rubyforge_project = "caldersphere"
|
26
24
|
|
27
25
|
gem.add_runtime_dependency 'rake', [">= 0.9.6"]
|
28
26
|
# restrict it for maven not to find jruby-9000.dev
|
29
27
|
gem.add_runtime_dependency 'jruby-jars', [">= 1.5.6", '< 2.0']
|
30
28
|
gem.add_runtime_dependency 'jruby-rack', [">= 1.0.0"]
|
31
|
-
gem.add_runtime_dependency 'rubyzip', [">= 0.9", "< 1.
|
29
|
+
gem.add_runtime_dependency 'rubyzip', [">= 0.9", "< 1.2"]
|
32
30
|
gem.add_development_dependency 'jbundler', "~> 0.5.5"
|
33
31
|
gem.add_development_dependency 'ruby-maven', '~> 3.1.1.0'
|
34
32
|
gem.add_development_dependency 'rspec', "~> 2.10"
|
data/web.xml.erb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
|
3
3
|
"http://java.sun.com/dtd/web-app_2_3.dtd">
|
4
4
|
<web-app>
|
5
|
+
<!-- <display-name>Uncomment and put name :here: for Tomcat Dashboard</display-name> -->
|
6
|
+
|
5
7
|
<% webxml.context_params.each do |k,v| %>
|
6
8
|
<context-param>
|
7
9
|
<param-name><%= k %></param-name>
|
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: 1.4.
|
4
|
+
version: 1.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sieger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
version: '0.9'
|
68
68
|
- - <
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: '1.
|
70
|
+
version: '1.2'
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - '>='
|
@@ -75,7 +75,7 @@ dependencies:
|
|
75
75
|
version: '0.9'
|
76
76
|
- - <
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version: '1.
|
78
|
+
version: '1.2'
|
79
79
|
prerelease: false
|
80
80
|
type: :runtime
|
81
81
|
- !ruby/object:Gem::Dependency
|
@@ -136,9 +136,8 @@ dependencies:
|
|
136
136
|
type: :development
|
137
137
|
description: |-
|
138
138
|
Warbler is a gem to make a Java jar or war file out of any Ruby,
|
139
|
-
Rails,
|
140
|
-
|
141
|
-
deployment to a Java environment.
|
139
|
+
Rails, or Rack application. Warbler provides a minimal, flexible, Ruby-like way to
|
140
|
+
bundle up all of your application files for deployment to a Java environment.
|
142
141
|
email: nick@nicksieger.com
|
143
142
|
executables:
|
144
143
|
- warble
|
@@ -362,7 +361,7 @@ files:
|
|
362
361
|
- warble.rb
|
363
362
|
- warbler.gemspec
|
364
363
|
- web.xml.erb
|
365
|
-
homepage:
|
364
|
+
homepage: https://github.com/jruby/warbler
|
366
365
|
licenses:
|
367
366
|
- MIT
|
368
367
|
metadata: {}
|
@@ -386,7 +385,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
386
385
|
- !ruby/object:Gem::Version
|
387
386
|
version: '0'
|
388
387
|
requirements: []
|
389
|
-
rubyforge_project:
|
388
|
+
rubyforge_project:
|
390
389
|
rubygems_version: 2.2.2
|
391
390
|
signing_key:
|
392
391
|
specification_version: 4
|