warbler 1.4.4 → 1.4.5
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/History.txt +3 -0
- data/README.rdoc +1 -1
- data/ext/JarMain.java +50 -44
- data/ext/WarblerJar.java +10 -8
- data/integration/pom.xml +1 -1
- data/lib/warbler/templates/rack.erb +1 -1
- data/lib/warbler/templates/war.erb +2 -2
- data/lib/warbler/traits.rb +14 -7
- data/lib/warbler/traits/bundler.rb +2 -2
- data/lib/warbler/traits/jbundler.rb +2 -2
- data/lib/warbler/traits/merb.rb +2 -2
- data/lib/warbler/traits/rack.rb +2 -2
- data/lib/warbler/traits/rails.rb +2 -2
- data/lib/warbler/version.rb +1 -1
- data/lib/warbler/web_server.rb +48 -6
- data/pom.xml +1 -1
- data/spec/m2_home/conf/settings.xml +25 -0
- data/spec/warbler/traits_spec.rb +8 -4
- data/spec/warbler/web_server_spec.rb +41 -0
- data/warble.rb +6 -0
- data/warbler.gemspec +1 -1
- metadata +15 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f191c5553256cc2b14be10dbb9e5bb4582080046
|
4
|
+
data.tar.gz: 30b9d9cbb24297872f2bc0f5ec6978f4e2bfa99d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e445e6ad70bcf3047e44661bfb599a43d23491bf80baae4c36f468cd49660b0dce622a01b4bd98ce7eb4e2ed758b72eac1cb4cd5b0a42a30d33599d91f56b0a
|
7
|
+
data.tar.gz: 2623d3d975d55216dcf3a8574b126ca91e745b20b870672515a34c4ffcbf46b9b0dd7ba678e215b47aaa2315c73e7c21d1c2b5b8d143c4602ab203e3a29de87b
|
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= Warbler {<img src="https://travis-ci.org/jruby/warbler.png" />}[https://travis-ci.org/jruby/warbler]
|
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
3
|
Warbler is a gem to make a Java jar or war file out of any Ruby, Rails or Rack
|
4
4
|
application. Warbler provides a minimal, flexible, Ruby-like way to bundle up
|
data/ext/JarMain.java
CHANGED
@@ -25,15 +25,15 @@ import java.util.jar.JarEntry;
|
|
25
25
|
import java.util.jar.JarFile;
|
26
26
|
|
27
27
|
public class JarMain implements Runnable {
|
28
|
-
|
28
|
+
|
29
29
|
static final String MAIN = "/" + JarMain.class.getName().replace('.', '/') + ".class";
|
30
30
|
|
31
31
|
final boolean debug = isDebug();
|
32
|
-
|
32
|
+
|
33
33
|
protected final String[] args;
|
34
34
|
protected final String archive;
|
35
35
|
private final String path;
|
36
|
-
|
36
|
+
|
37
37
|
protected File extractRoot;
|
38
38
|
|
39
39
|
protected URLClassLoader classLoader;
|
@@ -43,15 +43,15 @@ public class JarMain implements Runnable {
|
|
43
43
|
URL mainClass = getClass().getResource(MAIN);
|
44
44
|
try {
|
45
45
|
this.path = mainClass.toURI().getSchemeSpecificPart();
|
46
|
-
}
|
46
|
+
}
|
47
47
|
catch (URISyntaxException e) {
|
48
48
|
throw new RuntimeException(e);
|
49
49
|
}
|
50
50
|
archive = this.path.replace("!" + MAIN, "").replace("file:", "");
|
51
|
-
|
51
|
+
|
52
52
|
Runtime.getRuntime().addShutdownHook(new Thread(this));
|
53
53
|
}
|
54
|
-
|
54
|
+
|
55
55
|
protected URL[] extractArchive() throws Exception {
|
56
56
|
final JarFile jarFile = new JarFile(archive);
|
57
57
|
try {
|
@@ -65,12 +65,12 @@ public class JarMain implements Runnable {
|
|
65
65
|
extractRoot = File.createTempFile("jruby", "extract");
|
66
66
|
extractRoot.delete(); extractRoot.mkdirs();
|
67
67
|
|
68
|
-
final List<URL> urls = new ArrayList<URL>();
|
68
|
+
final List<URL> urls = new ArrayList<URL>(jarNames.size());
|
69
69
|
for (Map.Entry<String, JarEntry> e : jarNames.entrySet()) {
|
70
70
|
URL entryURL = extractEntry(e.getValue(), e.getKey());
|
71
71
|
if (entryURL != null) urls.add( entryURL );
|
72
72
|
}
|
73
|
-
return
|
73
|
+
return urls.toArray(new URL[urls.size()]);
|
74
74
|
}
|
75
75
|
finally {
|
76
76
|
jarFile.close();
|
@@ -84,18 +84,18 @@ public class JarMain implements Runnable {
|
|
84
84
|
}
|
85
85
|
return null; // do not extract entry
|
86
86
|
}
|
87
|
-
|
87
|
+
|
88
88
|
protected URL extractEntry(final JarEntry entry, final String path) throws Exception {
|
89
89
|
final File file = new File(extractRoot, path);
|
90
90
|
if ( entry.isDirectory() ) {
|
91
|
-
file.mkdirs();
|
91
|
+
file.mkdirs();
|
92
92
|
return null;
|
93
93
|
}
|
94
94
|
final String entryPath = entryPath(entry.getName());
|
95
95
|
final InputStream entryStream;
|
96
96
|
try {
|
97
97
|
entryStream = new URI("jar", entryPath, null).toURL().openStream();
|
98
|
-
}
|
98
|
+
}
|
99
99
|
catch (IllegalArgumentException e) {
|
100
100
|
// TODO gems '%' file name "encoding" ?!
|
101
101
|
debug("failed to open jar:" + entryPath + " skipping entry: " + entry.getName(), e);
|
@@ -110,7 +110,7 @@ public class JarMain implements Runnable {
|
|
110
110
|
while ((bytesRead = entryStream.read(buf)) != -1) {
|
111
111
|
outStream.write(buf, 0, bytesRead);
|
112
112
|
}
|
113
|
-
}
|
113
|
+
}
|
114
114
|
finally {
|
115
115
|
entryStream.close();
|
116
116
|
outStream.close();
|
@@ -135,7 +135,7 @@ public class JarMain implements Runnable {
|
|
135
135
|
invokeMethod(scriptingContainer, "setClassLoader", new Class[] { ClassLoader.class }, classLoader);
|
136
136
|
return scriptingContainer;
|
137
137
|
}
|
138
|
-
|
138
|
+
|
139
139
|
protected int launchJRuby(final URL[] jars) throws Exception {
|
140
140
|
final Object scriptingContainer = newScriptingContainer(jars);
|
141
141
|
debug("invoking " + archive + " with: " + Arrays.deepToString(args));
|
@@ -144,7 +144,7 @@ public class JarMain implements Runnable {
|
|
144
144
|
}
|
145
145
|
|
146
146
|
protected String launchScript() {
|
147
|
-
return
|
147
|
+
return
|
148
148
|
"begin\n" +
|
149
149
|
" require 'META-INF/init.rb'\n" +
|
150
150
|
" require 'META-INF/main.rb'\n" +
|
@@ -153,7 +153,7 @@ public class JarMain implements Runnable {
|
|
153
153
|
" e.status\n" +
|
154
154
|
"end";
|
155
155
|
}
|
156
|
-
|
156
|
+
|
157
157
|
protected int start() throws Exception {
|
158
158
|
final URL[] jars = extractArchive();
|
159
159
|
return launchJRuby(jars);
|
@@ -168,10 +168,23 @@ public class JarMain implements Runnable {
|
|
168
168
|
if (debug && t != null) t.printStackTrace(System.out);
|
169
169
|
}
|
170
170
|
|
171
|
+
protected static void debug(Throwable t) {
|
172
|
+
if (isDebug()) t.printStackTrace(System.out);
|
173
|
+
}
|
174
|
+
|
171
175
|
protected void warn(String msg) {
|
172
176
|
System.out.println("WARNING: " + msg);
|
173
177
|
}
|
174
|
-
|
178
|
+
|
179
|
+
protected static void error(Throwable t) {
|
180
|
+
error(t.toString(), t);
|
181
|
+
}
|
182
|
+
|
183
|
+
protected static void error(String msg, Throwable t) {
|
184
|
+
System.err.println("ERROR: " + msg);
|
185
|
+
debug(t);
|
186
|
+
}
|
187
|
+
|
175
188
|
protected void delete(File f) {
|
176
189
|
try {
|
177
190
|
if (f.isDirectory() && !isSymlink(f)) {
|
@@ -181,22 +194,19 @@ public class JarMain implements Runnable {
|
|
181
194
|
}
|
182
195
|
}
|
183
196
|
f.delete();
|
184
|
-
} catch (IOException e) {
|
185
|
-
System.err.println("error: " + e.toString());
|
186
197
|
}
|
198
|
+
catch (IOException e) { error(e); }
|
187
199
|
}
|
188
200
|
|
189
201
|
protected boolean isSymlink(File file) throws IOException {
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
}
|
199
|
-
return !canon.getCanonicalFile().equals(canon.getAbsoluteFile());
|
202
|
+
if (file == null) throw new NullPointerException("File must not be null");
|
203
|
+
final File canonical;
|
204
|
+
if ( file.getParent() == null ) canonical = file;
|
205
|
+
else {
|
206
|
+
File parentDir = file.getParentFile().getCanonicalFile();
|
207
|
+
canonical = new File(parentDir, file.getName());
|
208
|
+
}
|
209
|
+
return ! canonical.getCanonicalFile().equals( canonical.getAbsoluteFile() );
|
200
210
|
}
|
201
211
|
|
202
212
|
public void run() {
|
@@ -204,10 +214,8 @@ public class JarMain implements Runnable {
|
|
204
214
|
try {
|
205
215
|
invokeMethod(classLoader, "close");
|
206
216
|
}
|
207
|
-
catch(NoSuchMethodException e) { } // We're not being run on Java >= 7
|
208
|
-
catch(Exception e) {
|
209
|
-
System.err.println("error: " + e.toString());
|
210
|
-
}
|
217
|
+
catch (NoSuchMethodException e) { } // We're not being run on Java >= 7
|
218
|
+
catch (Exception e) { error(e); }
|
211
219
|
|
212
220
|
if ( extractRoot != null ) delete(extractRoot);
|
213
221
|
}
|
@@ -219,29 +227,27 @@ public class JarMain implements Runnable {
|
|
219
227
|
protected static void doStart(final JarMain main) {
|
220
228
|
try {
|
221
229
|
int exit = main.start();
|
222
|
-
if(isSystemExitEnabled()) System.exit(exit);
|
223
|
-
}
|
224
|
-
|
230
|
+
if (isSystemExitEnabled()) System.exit(exit);
|
231
|
+
}
|
232
|
+
catch (Exception e) {
|
225
233
|
Throwable t = e;
|
226
|
-
while (t.getCause() != null && t.getCause() != t) {
|
234
|
+
while ( t.getCause() != null && t.getCause() != t ) {
|
227
235
|
t = t.getCause();
|
228
236
|
}
|
229
|
-
|
230
|
-
t.printStackTrace();
|
231
|
-
}
|
237
|
+
error(e.toString(), t);
|
232
238
|
System.exit(1);
|
233
239
|
}
|
234
240
|
}
|
235
|
-
|
236
|
-
protected static Object invokeMethod(final Object self, final String name, final Object... args)
|
241
|
+
|
242
|
+
protected static Object invokeMethod(final Object self, final String name, final Object... args)
|
237
243
|
throws NoSuchMethodException, IllegalAccessException, Exception {
|
238
|
-
|
244
|
+
|
239
245
|
final Class[] signature = new Class[args.length];
|
240
246
|
for ( int i = 0; i < args.length; i++ ) signature[i] = args[i].getClass();
|
241
247
|
return invokeMethod(self, name, signature, args);
|
242
248
|
}
|
243
249
|
|
244
|
-
protected static Object invokeMethod(final Object self, final String name, final Class[] signature, final Object... args)
|
250
|
+
protected static Object invokeMethod(final Object self, final String name, final Class[] signature, final Object... args)
|
245
251
|
throws NoSuchMethodException, IllegalAccessException, Exception {
|
246
252
|
Method method = self.getClass().getDeclaredMethod(name, signature);
|
247
253
|
try {
|
@@ -255,7 +261,7 @@ public class JarMain implements Runnable {
|
|
255
261
|
throw e;
|
256
262
|
}
|
257
263
|
}
|
258
|
-
|
264
|
+
|
259
265
|
static boolean isDebug() {
|
260
266
|
return Boolean.getBoolean("warbler.debug");
|
261
267
|
}
|
data/ext/WarblerJar.java
CHANGED
@@ -37,8 +37,9 @@ public class WarblerJar {
|
|
37
37
|
}
|
38
38
|
|
39
39
|
@JRubyMethod
|
40
|
-
public static IRubyObject create_jar(ThreadContext context, IRubyObject
|
41
|
-
|
40
|
+
public static IRubyObject create_jar(ThreadContext context, IRubyObject self,
|
41
|
+
IRubyObject jar_path, IRubyObject entries) {
|
42
|
+
final Ruby runtime = context.runtime;
|
42
43
|
|
43
44
|
if (!(entries instanceof RubyHash)) {
|
44
45
|
throw runtime.newArgumentError("expected a hash for the second argument");
|
@@ -56,7 +57,7 @@ public class WarblerJar {
|
|
56
57
|
}
|
57
58
|
} catch (IOException e) {
|
58
59
|
if (runtime.isDebug()) {
|
59
|
-
e.printStackTrace();
|
60
|
+
e.printStackTrace(runtime.getOut());
|
60
61
|
}
|
61
62
|
throw runtime.newIOErrorFromException(e);
|
62
63
|
}
|
@@ -65,8 +66,9 @@ public class WarblerJar {
|
|
65
66
|
}
|
66
67
|
|
67
68
|
@JRubyMethod
|
68
|
-
public static IRubyObject entry_in_jar(ThreadContext context, IRubyObject
|
69
|
-
|
69
|
+
public static IRubyObject entry_in_jar(ThreadContext context, IRubyObject self,
|
70
|
+
IRubyObject jar_path, IRubyObject entry) {
|
71
|
+
final Ruby runtime = context.runtime;
|
70
72
|
try {
|
71
73
|
InputStream entryStream = getStream(jar_path.convertToString().getUnicodeValue(),
|
72
74
|
entry.convertToString().getUnicodeValue());
|
@@ -84,7 +86,7 @@ public class WarblerJar {
|
|
84
86
|
}
|
85
87
|
} catch (IOException e) {
|
86
88
|
if (runtime.isDebug()) {
|
87
|
-
e.printStackTrace();
|
89
|
+
e.printStackTrace(runtime.getOut());
|
88
90
|
}
|
89
91
|
throw runtime.newIOErrorFromException(e);
|
90
92
|
}
|
@@ -120,7 +122,7 @@ public class WarblerJar {
|
|
120
122
|
try {
|
121
123
|
zip.putNextEntry(new ZipEntry(entryName));
|
122
124
|
byte[] buf = new byte[16384];
|
123
|
-
int bytesRead
|
125
|
+
int bytesRead;
|
124
126
|
while ((bytesRead = inFile.read(buf)) != -1) {
|
125
127
|
zip.write(buf, 0, bytesRead);
|
126
128
|
}
|
@@ -181,7 +183,7 @@ public class WarblerJar {
|
|
181
183
|
entry = trimTrailingSlashes(entry);
|
182
184
|
|
183
185
|
ZipInputStream jstream = new ZipInputStream(jar);
|
184
|
-
ZipEntry zentry
|
186
|
+
ZipEntry zentry;
|
185
187
|
while ((zentry = jstream.getNextEntry()) != null) {
|
186
188
|
if (trimTrailingSlashes(zentry.getName()).equals(entry)) {
|
187
189
|
return jstream;
|
data/integration/pom.xml
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
21
21
|
<jruby.version>1.7.13</jruby.version>
|
22
22
|
<!-- prereleased gems ARE snapshots -->
|
23
|
-
<warbler.version>1.4.
|
23
|
+
<warbler.version>1.4.5.dev-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>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<% assignment_operator = config.override_gem_home ? "=" : "||=" %>
|
2
2
|
if $servlet_context.nil?
|
3
|
-
ENV['GEM_HOME'] <%= assignment_operator %> File.expand_path('
|
3
|
+
ENV['GEM_HOME'] <%= assignment_operator %> File.expand_path(File.join('..', '..', '<%= config.gem_path %>'), __FILE__)
|
4
4
|
<% if config.bundler && config.bundler[:gemfile_path] %>
|
5
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('
|
5
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path(File.join('..', '..', '<%= config.bundler[:gemfile_path] %>'), __FILE__)
|
6
6
|
<% end %>
|
7
7
|
else
|
8
8
|
ENV['GEM_HOME'] <%= assignment_operator %> $servlet_context.getRealPath('<%= config.gem_path %>')
|
data/lib/warbler/traits.rb
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
#++
|
7
7
|
|
8
8
|
require 'stringio'
|
9
|
+
require 'tsort'
|
9
10
|
|
10
11
|
module Warbler
|
11
12
|
# Traits are project configuration characteristics that correspond
|
@@ -21,7 +22,7 @@ module Warbler
|
|
21
22
|
end
|
22
23
|
|
23
24
|
def auto_detect_traits
|
24
|
-
Traits.constants.map {|t| Traits.const_get(t)}.select {|tc| tc.detect? }
|
25
|
+
TraitsDependencyArray.new(Traits.constants.map {|t| Traits.const_get(t)}).tsort.select {|tc| tc.detect? }
|
25
26
|
end
|
26
27
|
|
27
28
|
def before_configure
|
@@ -49,12 +50,8 @@ module Warbler
|
|
49
50
|
# Each trait class includes this module to receive shared functionality.
|
50
51
|
module Trait
|
51
52
|
module ClassMethods
|
52
|
-
def
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
def requires?(t)
|
57
|
-
false
|
53
|
+
def requirements
|
54
|
+
[]
|
58
55
|
end
|
59
56
|
end
|
60
57
|
|
@@ -103,6 +100,16 @@ module Warbler
|
|
103
100
|
FileList[JRubyJars.core_jar_path, JRubyJars.stdlib_jar_path]
|
104
101
|
end
|
105
102
|
end
|
103
|
+
|
104
|
+
class TraitsDependencyArray < Array
|
105
|
+
include TSort
|
106
|
+
|
107
|
+
alias tsort_each_node each
|
108
|
+
def tsort_each_child(node, &block)
|
109
|
+
node.requirements.each(&block)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
106
113
|
end
|
107
114
|
|
108
115
|
require 'warbler/traits/jar'
|
data/lib/warbler/traits/merb.rb
CHANGED
data/lib/warbler/traits/rack.rb
CHANGED
data/lib/warbler/traits/rails.rb
CHANGED
data/lib/warbler/version.rb
CHANGED
data/lib/warbler/web_server.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module Warbler
|
2
2
|
class WebServer
|
3
3
|
class Artifact < Struct.new(:repo, :group_id, :artifact_id, :version)
|
4
|
+
|
4
5
|
def path_fragment
|
5
6
|
@path_fragment ||= "#{group_id.gsub('.', '/')}/#{artifact_id}/#{version}/#{artifact_id}-#{version}.jar"
|
6
7
|
end
|
7
8
|
|
8
9
|
def cached_path
|
9
|
-
@cached_path ||= File.
|
10
|
+
@cached_path ||= File.join(local_repository, path_fragment)
|
10
11
|
end
|
11
12
|
|
12
13
|
def download_url
|
@@ -33,6 +34,47 @@ module Warbler
|
|
33
34
|
end
|
34
35
|
cached_path
|
35
36
|
end
|
37
|
+
|
38
|
+
@@local_repository = nil
|
39
|
+
|
40
|
+
def local_repository
|
41
|
+
@@local_repository ||= begin
|
42
|
+
m2_home = File.join(user_home, '.m2')
|
43
|
+
if File.exist?(settings = File.join(m2_home, 'settings.xml'))
|
44
|
+
local_repo = detect_local_repository(settings)
|
45
|
+
end
|
46
|
+
if local_repo.nil? && mvn_home = ENV['M2_HOME'] || ENV['MAVEN_HOME']
|
47
|
+
if File.exist?(settings = File.join(mvn_home, 'conf/settings.xml'))
|
48
|
+
local_repo = detect_local_repository(settings)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
local_repo || File.join(m2_home, 'repository')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def user_home
|
58
|
+
ENV[ 'HOME' ] || begin
|
59
|
+
user_home = Dir.home if Dir.respond_to?(:home)
|
60
|
+
unless user_home
|
61
|
+
user_home = ENV_JAVA[ 'user.home' ] if Object.const_defined?(:ENV_JAVA)
|
62
|
+
end
|
63
|
+
user_home
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def detect_local_repository(settings); require 'rexml/document'
|
68
|
+
doc = REXML::Document.new( File.read( settings ) )
|
69
|
+
if local_repo = doc.root.elements['localRepository']
|
70
|
+
if ( local_repo = local_repo.first )
|
71
|
+
local_repo = local_repo.value
|
72
|
+
local_repo = nil if local_repo.empty?
|
73
|
+
end
|
74
|
+
end
|
75
|
+
local_repo
|
76
|
+
end
|
77
|
+
|
36
78
|
end
|
37
79
|
|
38
80
|
def add(jar)
|
@@ -90,9 +132,9 @@ PROPS
|
|
90
132
|
end
|
91
133
|
end
|
92
134
|
|
93
|
-
WEB_SERVERS = Hash.new {|
|
94
|
-
WEB_SERVERS
|
95
|
-
|
96
|
-
|
97
|
-
|
135
|
+
WEB_SERVERS = Hash.new { |hash,_| hash['jetty'] }
|
136
|
+
WEB_SERVERS['winstone'] = WinstoneServer.new
|
137
|
+
WEB_SERVERS['jenkins-ci.winstone'] = JenkinsWinstoneServer.new,
|
138
|
+
WEB_SERVERS['jetty'] = JettyServer.new
|
139
|
+
|
98
140
|
end
|
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.5.dev-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,
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<settings>
|
3
|
+
<profiles>
|
4
|
+
<profile>
|
5
|
+
<id>codehaus</id>
|
6
|
+
<activation>
|
7
|
+
<activeByDefault>false</activeByDefault>
|
8
|
+
</activation>
|
9
|
+
<pluginRepositories>
|
10
|
+
<pluginRepository>
|
11
|
+
<id>codehaus</id>
|
12
|
+
<name>Codehaus Repository</name>
|
13
|
+
<releases>
|
14
|
+
<enabled>true</enabled>
|
15
|
+
</releases>
|
16
|
+
<snapshots>
|
17
|
+
<enabled>false</enabled>
|
18
|
+
</snapshots>
|
19
|
+
<url>http://repository.codehaus.org</url>
|
20
|
+
</pluginRepository>
|
21
|
+
</pluginRepositories>
|
22
|
+
</profile>
|
23
|
+
</profiles>
|
24
|
+
<localRepository>/usr/local/maven/repo</localRepository>
|
25
|
+
</settings>
|
data/spec/warbler/traits_spec.rb
CHANGED
@@ -9,9 +9,13 @@ require File.expand_path('../../spec_helper', __FILE__)
|
|
9
9
|
|
10
10
|
describe Warbler::Traits do
|
11
11
|
it "are ordered by fewer dependencies first" do
|
12
|
-
traits =
|
13
|
-
result = traits.shuffle
|
14
|
-
|
15
|
-
result.
|
12
|
+
traits = Warbler::TraitsDependencyArray.new( Warbler::Traits.constants.map {|t| Warbler::Traits.const_get(t)})
|
13
|
+
result = traits.shuffle!.tsort
|
14
|
+
|
15
|
+
result.each do |trait|
|
16
|
+
trait.requirements.each do |requirement|
|
17
|
+
result.index(requirement).should < result.index(trait)
|
18
|
+
end
|
19
|
+
end
|
16
20
|
end
|
17
21
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
class Warbler::WebServer::Artifact
|
4
|
+
def self.reset_local_repository
|
5
|
+
@@local_repository = nil
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Warbler::WebServer::Artifact do
|
10
|
+
|
11
|
+
@@_env = ENV.dup
|
12
|
+
|
13
|
+
after(:all) { ENV.clear; ENV.update @@_env }
|
14
|
+
|
15
|
+
before do
|
16
|
+
Warbler::WebServer::Artifact.reset_local_repository
|
17
|
+
end
|
18
|
+
|
19
|
+
after(:all) do
|
20
|
+
Warbler::WebServer::Artifact.reset_local_repository
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:sample_artifact) do
|
24
|
+
Warbler::WebServer::Artifact.new("http://repo.jenkins-ci.org/public",
|
25
|
+
"org.jenkins-ci", "winstone", "0.9.10-jenkins-43"
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "uses default (maven) local repository" do
|
30
|
+
ENV['HOME'] = '/home/borg'
|
31
|
+
ENV.delete('M2_HOME'); ENV.delete('MAVEN_HOME')
|
32
|
+
expect( sample_artifact.local_repository ).to eql "/home/borg/.m2/repository"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "detects a custom maven repository setting" do
|
36
|
+
ENV['HOME'] = '/home/borg'
|
37
|
+
ENV['M2_HOME'] = File.expand_path('../m2_home', File.dirname(__FILE__))
|
38
|
+
expect( sample_artifact.local_repository ).to eql '/usr/local/maven/repo'
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/warble.rb
CHANGED
@@ -80,6 +80,12 @@ Warbler::Config.new do |config|
|
|
80
80
|
# of the project directory.
|
81
81
|
# config.jar_name = "mywar"
|
82
82
|
|
83
|
+
# File extension for the archive. Defaults to either 'jar' or 'war'.
|
84
|
+
# config.jar_extension = "jar"
|
85
|
+
|
86
|
+
# Destionation for the created archive. Defaults to project's root directory.
|
87
|
+
# config.autodeploy_dir = "dist/"
|
88
|
+
|
83
89
|
# Name of the MANIFEST.MF template for the war file. Defaults to a simple
|
84
90
|
# MANIFEST.MF that contains the version of Warbler used to create the war file.
|
85
91
|
# config.manifest_file = "config/MANIFEST.MF"
|
data/warbler.gemspec
CHANGED
@@ -25,7 +25,7 @@ bundle up all of your application files for deployment to a Java environment.}
|
|
25
25
|
gem.add_runtime_dependency 'rake', [">= 0.9.6"]
|
26
26
|
# restrict it for maven not to find jruby-9000.dev
|
27
27
|
gem.add_runtime_dependency 'jruby-jars', [">= 1.5.6", '< 2.0']
|
28
|
-
gem.add_runtime_dependency 'jruby-rack', [">= 1.
|
28
|
+
gem.add_runtime_dependency 'jruby-rack', [">= 1.1.1", '< 1.3']
|
29
29
|
gem.add_runtime_dependency 'rubyzip', [">= 0.9", "< 1.2"]
|
30
30
|
gem.add_development_dependency 'jbundler', "~> 0.5.5"
|
31
31
|
gem.add_development_dependency 'ruby-maven', '~> 3.1.1.0'
|
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.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sieger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -50,12 +50,18 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - '>='
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.
|
53
|
+
version: 1.1.1
|
54
|
+
- - <
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '1.3'
|
54
57
|
requirement: !ruby/object:Gem::Requirement
|
55
58
|
requirements:
|
56
59
|
- - '>='
|
57
60
|
- !ruby/object:Gem::Version
|
58
|
-
version: 1.
|
61
|
+
version: 1.1.1
|
62
|
+
- - <
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '1.3'
|
59
65
|
prerelease: false
|
60
66
|
type: :runtime
|
61
67
|
- !ruby/object:Gem::Dependency
|
@@ -278,6 +284,7 @@ files:
|
|
278
284
|
- pom.xml
|
279
285
|
- spec/drb_default_id_conv.rb
|
280
286
|
- spec/drb_helper.rb
|
287
|
+
- spec/m2_home/conf/settings.xml
|
281
288
|
- spec/sample_bundler/.bundle/config
|
282
289
|
- spec/sample_bundler/Gemfile
|
283
290
|
- spec/sample_bundler/Gemfile.lock
|
@@ -358,6 +365,7 @@ files:
|
|
358
365
|
- spec/warbler/task_spec.rb
|
359
366
|
- spec/warbler/traits_spec.rb
|
360
367
|
- spec/warbler/war_spec.rb
|
368
|
+
- spec/warbler/web_server_spec.rb
|
361
369
|
- warble.rb
|
362
370
|
- warbler.gemspec
|
363
371
|
- web.xml.erb
|
@@ -386,7 +394,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
386
394
|
version: '0'
|
387
395
|
requirements: []
|
388
396
|
rubyforge_project:
|
389
|
-
rubygems_version: 2.
|
397
|
+
rubygems_version: 2.1.9
|
390
398
|
signing_key:
|
391
399
|
specification_version: 4
|
392
400
|
summary: Warbler chirpily constructs .war files of your Rails applications.
|
@@ -475,6 +483,7 @@ test_files:
|
|
475
483
|
- integration/simple_rack_test/src/test/java/org/jruby/warbler/AppTestIT.java
|
476
484
|
- spec/drb_default_id_conv.rb
|
477
485
|
- spec/drb_helper.rb
|
486
|
+
- spec/m2_home/conf/settings.xml
|
478
487
|
- spec/sample_bundler/.bundle/config
|
479
488
|
- spec/sample_bundler/Gemfile
|
480
489
|
- spec/sample_bundler/Gemfile.lock
|
@@ -555,3 +564,4 @@ test_files:
|
|
555
564
|
- spec/warbler/task_spec.rb
|
556
565
|
- spec/warbler/traits_spec.rb
|
557
566
|
- spec/warbler/war_spec.rb
|
567
|
+
- spec/warbler/web_server_spec.rb
|