lock_jar 0.10.0 → 0.10.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +59 -59
  3. data/.travis.yml +8 -8
  4. data/CHANGELOG.md +30 -21
  5. data/Gemfile +13 -13
  6. data/Guardfile +9 -9
  7. data/README.md +375 -375
  8. data/Rakefile +24 -24
  9. data/bundler/Gemfile +21 -21
  10. data/bundler/LICENSE.txt +22 -22
  11. data/bundler/README.md +29 -29
  12. data/bundler/Rakefile +2 -2
  13. data/bundler/lib/lock_jar_bundler/bundler.rb +35 -35
  14. data/bundler/lib/lock_jar_bundler/piggy_back.rb +97 -97
  15. data/bundler/lib/lock_jar_bundler/version.rb +5 -5
  16. data/bundler/lib/lock_jar_bundler.rb +4 -4
  17. data/bundler/lock_jar_bundler.gemspec +24 -24
  18. data/bundler/spec/Jarfile +2 -2
  19. data/bundler/spec/dummy_gem/dummy_gem.gemspec +19 -19
  20. data/bundler/spec/lock_jar_bundler_spec.rb +48 -48
  21. data/bundler/spec/spec_helper.rb +88 -88
  22. data/lib/lock_jar/buildr.rb +144 -144
  23. data/lib/lock_jar/bundler.rb +154 -154
  24. data/lib/lock_jar/cli.rb +64 -64
  25. data/lib/lock_jar/domain/artifact.rb +123 -123
  26. data/lib/lock_jar/domain/dsl.rb +187 -187
  27. data/lib/lock_jar/domain/dsl_helper.rb +83 -83
  28. data/lib/lock_jar/domain/gem_dsl.rb +44 -44
  29. data/lib/lock_jar/domain/jarfile_dsl.rb +46 -46
  30. data/lib/lock_jar/domain/lockfile.rb +113 -113
  31. data/lib/lock_jar/maven.rb +111 -111
  32. data/lib/lock_jar/registry.rb +92 -92
  33. data/lib/lock_jar/resolver.rb +95 -95
  34. data/lib/lock_jar/runtime.rb +359 -355
  35. data/lib/lock_jar/version.rb +3 -3
  36. data/lib/lock_jar.rb +172 -177
  37. data/lock_jar.gemspec +27 -27
  38. data/spec/fixtures/Jarfile +13 -13
  39. data/spec/fixtures/Jarfile2 +1 -0
  40. data/spec/lock_jar/class_loader_spec.rb +57 -57
  41. data/spec/lock_jar/cli_spec.rb +100 -100
  42. data/spec/lock_jar/domain/dsl_helper_spec.rb +52 -52
  43. data/spec/lock_jar/domain/dsl_spec.rb +57 -57
  44. data/spec/lock_jar/maven_spec.rb +23 -23
  45. data/spec/lock_jar/resolver_spec.rb +26 -26
  46. data/spec/lock_jar/runtime_spec.rb +26 -26
  47. data/spec/lock_jar_spec.rb +372 -295
  48. data/spec/pom.xml +34 -34
  49. data/spec/spec_helper.rb +38 -38
  50. data/spec/support/helper.rb +44 -44
  51. metadata +3 -1
@@ -1,295 +1,372 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__),'spec_helper'))
2
- require 'rubygems'
3
- require 'lib/lock_jar'
4
- require 'lib/lock_jar/domain/dsl'
5
- require 'naether'
6
-
7
- describe LockJar, "#lock" do
8
- it "should create a lock file" do
9
- if File.exists?( TEMP_DIR )
10
- File.delete( "#{TEMP_DIR}/Jarfile.lock" ) if File.exists?( "#{TEMP_DIR}/Jarfile.lock" )
11
- else
12
- Dir.mkdir( TEMP_DIR )
13
- end
14
-
15
- LockJar.lock( "spec/fixtures/Jarfile", :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
16
- File.exists?( "#{TEMP_DIR}/Jarfile.lock" ).should be_true
17
-
18
- lockfile = LockJar.read("#{TEMP_DIR}/Jarfile.lock")
19
- lockfile.to_hash.should eql({
20
- "version"=> LockJar::VERSION,
21
- "local_repository"=>"~/.m2/repository",
22
- "groups"=>{
23
- "default"=>{
24
- "locals"=>["spec/fixtures/naether-0.13.0.jar"],
25
- "dependencies"=>["ch.qos.logback:logback-classic:jar:0.9.24",
26
- "ch.qos.logback:logback-core:jar:0.9.24", "com.metapossum:metapossum-scanner:jar:1.0",
27
- "com.slackworks:modelcitizen:jar:0.2.2",
28
- "commons-beanutils:commons-beanutils:jar:1.8.3", "commons-io:commons-io:jar:1.4",
29
- "commons-lang:commons-lang:jar:2.6", "commons-logging:commons-logging:jar:1.1.1",
30
- "org.apache.mina:mina-core:jar:2.0.4",
31
- "org.slf4j:slf4j-api:jar:1.6.1"],
32
- "artifacts"=>[{
33
- "jar:org.apache.mina:mina-core:jar:2.0.4"=>{
34
- "transitive"=>{"org.slf4j:slf4j-api:jar:1.6.1"=>{}}
35
- }
36
- }, {
37
- "pom:spec/pom.xml"=>{
38
- "scopes"=>["runtime", "compile"],
39
- "transitive"=>{
40
- "com.slackworks:modelcitizen:jar:0.2.2" => {
41
- "com.metapossum:metapossum-scanner:jar:1.0"=>{
42
- "commons-io:commons-io:jar:1.4"=>{}
43
- },
44
- "commons-beanutils:commons-beanutils:jar:1.8.3"=>{
45
- "commons-logging:commons-logging:jar:1.1.1"=>{}
46
- },
47
- "ch.qos.logback:logback-classic:jar:0.9.24"=>{
48
- "ch.qos.logback:logback-core:jar:0.9.24"=>{}
49
- },
50
- "commons-lang:commons-lang:jar:2.6"=>{}
51
- }
52
- }
53
- }
54
- }]
55
- },
56
- "development"=>{
57
- "dependencies"=>["com.typesafe:config:jar:0.5.0"],
58
- "artifacts"=>[{
59
- "jar:com.typesafe:config:jar:0.5.0"=>{"transitive"=>{}}
60
- }]
61
- },
62
- "test"=>{
63
- "dependencies"=>["junit:junit:jar:4.10", "org.hamcrest:hamcrest-core:jar:1.1"],
64
- "artifacts"=>[{
65
- "jar:junit:junit:jar:4.10"=>{
66
- "transitive"=>{"org.hamcrest:hamcrest-core:jar:1.1"=>{}}}
67
- }]
68
- }
69
- },
70
- "remote_repositories" => ["http://mirrors.ibiblio.org/pub/mirrors/maven2", "http://repository.jboss.org/nexus/content/groups/public-jboss"]
71
- })
72
- end
73
-
74
- it "should replace dependencies with map" do
75
- dsl = LockJar::Domain::Dsl.create do
76
- map 'junit:junit:4.10', "#{TEMP_DIR}"
77
- jar 'junit:junit:4.10'
78
- end
79
-
80
- LockJar.lock( dsl, :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
81
- lockfile = LockJar.read("#{TEMP_DIR}/Jarfile.lock")
82
- lockfile.to_hash.should eql({
83
- "version"=> LockJar::VERSION,
84
- "maps"=>{"junit:junit:4.10"=>["#{TEMP_DIR}"]},
85
- "groups"=>{
86
- "default"=>{
87
- "dependencies"=>["junit:junit:jar:4.10", "org.hamcrest:hamcrest-core:jar:1.1"],
88
- "artifacts"=>[{
89
- "jar:junit:junit:jar:4.10"=>{
90
- "transitive"=>{"org.hamcrest:hamcrest-core:jar:1.1"=>{}}}
91
- }]
92
- }
93
- },
94
- "remote_repositories" => ["http://mirrors.ibiblio.org/pub/mirrors/maven2", "http://repository.jboss.org/nexus/content/groups/public-jboss"]
95
- })
96
- end
97
-
98
- it "should exclude excludes from dependencies" do
99
- dsl = LockJar::Domain::Dsl.create do
100
- exclude 'commons-logging', 'logkit'
101
- jar 'opensymphony:oscache:jar:2.4.1'
102
- end
103
-
104
- LockJar.lock( dsl, :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
105
- File.exists?( "#{TEMP_DIR}/Jarfile.lock" ).should be_true
106
- lockfile = LockJar.read("#{TEMP_DIR}/Jarfile.lock")
107
- lockfile.to_hash.should eql({
108
- "version"=> LockJar::VERSION,
109
- "excludes"=>["commons-logging", "logkit"],
110
- "groups"=>{
111
- "default"=>{
112
- "dependencies"=>[
113
- "avalon-framework:avalon-framework:jar:4.1.3", "javax.jms:jms:jar:1.1",
114
- "javax.servlet:servlet-api:jar:2.3", "log4j:log4j:jar:1.2.12",
115
- "opensymphony:oscache:jar:2.4.1"],
116
- "artifacts"=>[{
117
- "jar:opensymphony:oscache:jar:2.4.1"=>{
118
- "transitive"=>{
119
- "commons-logging:commons-logging:jar:1.1"=>{
120
- "logkit:logkit:jar:1.0.1"=>{},
121
- "log4j:log4j:jar:1.2.12"=>{},
122
- "avalon-framework:avalon-framework:jar:4.1.3"=>{}
123
- },
124
- "javax.jms:jms:jar:1.1"=>{},
125
- "javax.servlet:servlet-api:jar:2.3"=>{}
126
- }
127
- }
128
- }]
129
- }
130
- },
131
- "remote_repositories" => ["http://mirrors.ibiblio.org/pub/mirrors/maven2", "http://repository.jboss.org/nexus/content/groups/public-jboss"]
132
- })
133
-
134
- end
135
-
136
-
137
- it "should lock using a block" do
138
- LockJar.lock( :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/NoRepoJarfile.lock" ) do
139
- jar "org.eclipse.jetty:jetty-servlet:8.1.3.v20120416"
140
- end
141
-
142
- File.exists?( "#{TEMP_DIR}/NoRepoJarfile.lock" ).should be_true
143
-
144
- lockfile = LockJar.read("#{TEMP_DIR}/NoRepoJarfile.lock")
145
- lockfile.to_hash.should eql({
146
- "version"=> LockJar::VERSION,
147
- "groups"=>{
148
- "default"=>{
149
- "dependencies"=>["org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016",
150
- "org.eclipse.jetty:jetty-continuation:jar:8.1.3.v20120416",
151
- "org.eclipse.jetty:jetty-http:jar:8.1.3.v20120416",
152
- "org.eclipse.jetty:jetty-io:jar:8.1.3.v20120416",
153
- "org.eclipse.jetty:jetty-security:jar:8.1.3.v20120416",
154
- "org.eclipse.jetty:jetty-server:jar:8.1.3.v20120416",
155
- "org.eclipse.jetty:jetty-servlet:jar:8.1.3.v20120416",
156
- "org.eclipse.jetty:jetty-util:jar:8.1.3.v20120416"],
157
- "artifacts"=>[{
158
- "jar:org.eclipse.jetty:jetty-servlet:jar:8.1.3.v20120416"=>{
159
- "transitive"=>{
160
- "org.eclipse.jetty:jetty-security:jar:8.1.3.v20120416"=>{
161
- "org.eclipse.jetty:jetty-server:jar:8.1.3.v20120416"=>{
162
- "org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016"=>{},
163
- "org.eclipse.jetty:jetty-continuation:jar:8.1.3.v20120416"=>{},
164
- "org.eclipse.jetty:jetty-http:jar:8.1.3.v20120416"=>{
165
- "org.eclipse.jetty:jetty-io:jar:8.1.3.v20120416"=>{
166
- "org.eclipse.jetty:jetty-util:jar:8.1.3.v20120416"=>{}
167
- }
168
- }
169
- }
170
- }
171
- }
172
- }
173
- }]
174
- }
175
- }
176
- })
177
- end
178
- end
179
-
180
- describe LockJar, "#install" do
181
- it "should install jars" do
182
-
183
- LockJar.lock( "spec/fixtures/Jarfile", :download_artifacts => false, :local_repo => "#{TEMP_DIR}/test-repo-install", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
184
-
185
- jars = LockJar.install( "#{TEMP_DIR}/Jarfile.lock", ['default'], :local_repo => "#{TEMP_DIR}/test-repo-install" )
186
- jars.should eql([
187
- File.expand_path("#{TEMP_DIR}/test-repo-install/ch/qos/logback/logback-classic/0.9.24/logback-classic-0.9.24.jar"),
188
- File.expand_path("#{TEMP_DIR}/test-repo-install/ch/qos/logback/logback-core/0.9.24/logback-core-0.9.24.jar"),
189
- File.expand_path("#{TEMP_DIR}/test-repo-install/com/metapossum/metapossum-scanner/1.0/metapossum-scanner-1.0.jar"),
190
- File.expand_path("#{TEMP_DIR}/test-repo-install/com/slackworks/modelcitizen/0.2.2/modelcitizen-0.2.2.jar"),
191
- File.expand_path("#{TEMP_DIR}/test-repo-install/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar"),
192
- File.expand_path("#{TEMP_DIR}/test-repo-install/commons-io/commons-io/1.4/commons-io-1.4.jar"),
193
- File.expand_path("#{TEMP_DIR}/test-repo-install/commons-lang/commons-lang/2.6/commons-lang-2.6.jar"),
194
- File.expand_path("#{TEMP_DIR}/test-repo-install/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"),
195
- File.expand_path("#{TEMP_DIR}/test-repo-install/org/apache/mina/mina-core/2.0.4/mina-core-2.0.4.jar"),
196
- File.expand_path("#{TEMP_DIR}/test-repo-install/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar")
197
- ])
198
- end
199
-
200
- end
201
-
202
- describe LockJar, "#list" do
203
- it "should list jars" do
204
-
205
- LockJar.lock( "spec/fixtures/Jarfile", :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
206
-
207
- jars = LockJar.list( "#{TEMP_DIR}/Jarfile.lock", ['default', 'development', 'bad scope'], :local_repo => "#{TEMP_DIR}/test-repo" )
208
- jars.should eql([
209
- "ch.qos.logback:logback-classic:jar:0.9.24", "ch.qos.logback:logback-core:jar:0.9.24",
210
- "com.metapossum:metapossum-scanner:jar:1.0", "com.slackworks:modelcitizen:jar:0.2.2",
211
- "commons-beanutils:commons-beanutils:jar:1.8.3", "commons-io:commons-io:jar:1.4",
212
- "commons-lang:commons-lang:jar:2.6", "commons-logging:commons-logging:jar:1.1.1",
213
- "org.apache.mina:mina-core:jar:2.0.4",
214
- "org.slf4j:slf4j-api:jar:1.6.1", "spec/fixtures/naether-0.13.0.jar", "com.typesafe:config:jar:0.5.0" ])
215
- end
216
-
217
- it "should replace dependencies with maps" do
218
- dsl = LockJar::Domain::Dsl.create do
219
- map 'junit:junit', "#{TEMP_DIR}"
220
- jar 'junit:junit:4.10'
221
- end
222
-
223
- LockJar.lock( dsl, :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/ListJarfile.lock")
224
- paths = LockJar.list( "#{TEMP_DIR}/ListJarfile.lock", :local_repo => "#{TEMP_DIR}/test-repo" )
225
- paths.should eql( [ "#{TEMP_DIR}", "org.hamcrest:hamcrest-core:jar:1.1"] )
226
- end
227
-
228
- it "should replace dependencies with maps and get local paths" do
229
- dsl = LockJar::Domain::Dsl.create do
230
- map 'junit:junit', "#{TEMP_DIR}"
231
- jar 'junit:junit:4.10'
232
- end
233
-
234
- LockJar.lock( dsl, :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/ListJarfile.lock" )
235
- paths = LockJar.list( "#{TEMP_DIR}/ListJarfile.lock", :local_repo => "#{TEMP_DIR}/test-repo" )
236
- paths.should eql( [ "#{TEMP_DIR}", "org.hamcrest:hamcrest-core:jar:1.1"] )
237
- end
238
- end
239
-
240
- describe LockJar, "#load" do
241
- it "by Jarfile.lock" do
242
- if Naether.platform == 'java'
243
- lambda { java_import 'org.apache.mina.core.IoUtil' }.should raise_error
244
- else
245
- lambda { Rjb::import('org.apache.mina.core.IoUtil') }.should raise_error
246
- end
247
-
248
-
249
- LockJar.lock( "spec/fixtures/Jarfile", :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
250
-
251
- jars = LockJar.load( "#{TEMP_DIR}/Jarfile.lock", ['default'], :local_repo => "#{TEMP_DIR}/test-repo" )
252
- LockJar::Registry.instance.lockfile_registered?( "#{TEMP_DIR}/Jarfile.lock" ).should be_false
253
-
254
- jars.should eql([
255
- "spec/fixtures/naether-0.13.0.jar",
256
- File.expand_path("#{TEMP_DIR}/test-repo/ch/qos/logback/logback-classic/0.9.24/logback-classic-0.9.24.jar"),
257
- File.expand_path("#{TEMP_DIR}/test-repo/ch/qos/logback/logback-core/0.9.24/logback-core-0.9.24.jar"),
258
- File.expand_path("#{TEMP_DIR}/test-repo/com/metapossum/metapossum-scanner/1.0/metapossum-scanner-1.0.jar"),
259
- File.expand_path("#{TEMP_DIR}/test-repo/com/slackworks/modelcitizen/0.2.2/modelcitizen-0.2.2.jar"),
260
- File.expand_path("#{TEMP_DIR}/test-repo/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar"),
261
- File.expand_path("#{TEMP_DIR}/test-repo/commons-io/commons-io/1.4/commons-io-1.4.jar"),
262
- File.expand_path("#{TEMP_DIR}/test-repo/commons-lang/commons-lang/2.6/commons-lang-2.6.jar"),
263
- File.expand_path("#{TEMP_DIR}/test-repo/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"),
264
- File.expand_path("#{TEMP_DIR}/test-repo/org/apache/mina/mina-core/2.0.4/mina-core-2.0.4.jar"),
265
- File.expand_path("#{TEMP_DIR}/test-repo/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar"),
266
- ])
267
- if Naether.platform == 'java'
268
- lambda { java_import 'org.apache.mina.core.IoUtil' }.should_not raise_error
269
- else
270
- lambda { Rjb::import('org.apache.mina.core.IoUtil') }.should_not raise_error
271
- end
272
-
273
-
274
- end
275
-
276
- it "by block with resolve option" do
277
- if Naether.platform == 'java'
278
- lambda { java_import 'org.modeshape.common.math.Duration' }.should raise_error
279
- else
280
- lambda { Rjb::import('org.modeshape.common.math.Duration') }.should raise_error
281
- end
282
-
283
- jars = LockJar.load(:local_repo => TEST_REPO, :resolve => true) do
284
- jar 'org.modeshape:modeshape-common:3.4.0.Final'
285
- end
286
-
287
- jars.should eql( [File.expand_path(TEST_REPO + "/org/modeshape/modeshape-common/3.4.0.Final/modeshape-common-3.4.0.Final.jar")] )
288
-
289
- if Naether.platform == 'java'
290
- lambda { java_import 'org.modeshape.common.math.Duration' }.should_not raise_error
291
- else
292
- lambda { Rjb::import('org.modeshape.common.math.Duration') }.should_not raise_error
293
- end
294
- end
295
- end
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'spec_helper'))
2
+ require 'rubygems'
3
+ require 'lib/lock_jar'
4
+ require 'lib/lock_jar/domain/dsl'
5
+ require 'naether'
6
+
7
+ describe LockJar, "#lock" do
8
+ it "should create a lock file" do
9
+ if File.exists?( TEMP_DIR )
10
+ File.delete( "#{TEMP_DIR}/Jarfile.lock" ) if File.exists?( "#{TEMP_DIR}/Jarfile.lock" )
11
+ else
12
+ Dir.mkdir( TEMP_DIR )
13
+ end
14
+
15
+ LockJar.lock( "spec/fixtures/Jarfile", :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
16
+ File.exists?( "#{TEMP_DIR}/Jarfile.lock" ).should be_true
17
+
18
+ lockfile = LockJar.read("#{TEMP_DIR}/Jarfile.lock")
19
+ lockfile.to_hash.should eql({
20
+ "version"=> LockJar::VERSION,
21
+ "local_repository"=>"~/.m2/repository",
22
+ "groups"=>{
23
+ "default"=>{
24
+ "locals"=>["spec/fixtures/naether-0.13.0.jar"],
25
+ "dependencies"=>["ch.qos.logback:logback-classic:jar:0.9.24",
26
+ "ch.qos.logback:logback-core:jar:0.9.24", "com.metapossum:metapossum-scanner:jar:1.0",
27
+ "com.slackworks:modelcitizen:jar:0.2.2",
28
+ "commons-beanutils:commons-beanutils:jar:1.8.3", "commons-io:commons-io:jar:1.4",
29
+ "commons-lang:commons-lang:jar:2.6", "commons-logging:commons-logging:jar:1.1.1",
30
+ "org.apache.mina:mina-core:jar:2.0.4",
31
+ "org.slf4j:slf4j-api:jar:1.6.1"],
32
+ "artifacts"=>[{
33
+ "jar:org.apache.mina:mina-core:jar:2.0.4"=>{
34
+ "transitive"=>{"org.slf4j:slf4j-api:jar:1.6.1"=>{}}
35
+ }
36
+ }, {
37
+ "pom:spec/pom.xml"=>{
38
+ "scopes"=>["runtime", "compile"],
39
+ "transitive"=>{
40
+ "com.slackworks:modelcitizen:jar:0.2.2" => {
41
+ "com.metapossum:metapossum-scanner:jar:1.0"=>{
42
+ "commons-io:commons-io:jar:1.4"=>{}
43
+ },
44
+ "commons-beanutils:commons-beanutils:jar:1.8.3"=>{
45
+ "commons-logging:commons-logging:jar:1.1.1"=>{}
46
+ },
47
+ "ch.qos.logback:logback-classic:jar:0.9.24"=>{
48
+ "ch.qos.logback:logback-core:jar:0.9.24"=>{}
49
+ },
50
+ "commons-lang:commons-lang:jar:2.6"=>{}
51
+ }
52
+ }
53
+ }
54
+ }]
55
+ },
56
+ "development"=>{
57
+ "dependencies"=>["com.typesafe:config:jar:0.5.0"],
58
+ "artifacts"=>[{
59
+ "jar:com.typesafe:config:jar:0.5.0"=>{"transitive"=>{}}
60
+ }]
61
+ },
62
+ "test"=>{
63
+ "dependencies"=>["junit:junit:jar:4.10", "org.hamcrest:hamcrest-core:jar:1.1"],
64
+ "artifacts"=>[{
65
+ "jar:junit:junit:jar:4.10"=>{
66
+ "transitive"=>{"org.hamcrest:hamcrest-core:jar:1.1"=>{}}}
67
+ }]
68
+ }
69
+ },
70
+ "remote_repositories" => ["http://mirrors.ibiblio.org/pub/mirrors/maven2", "http://repository.jboss.org/nexus/content/groups/public-jboss"]
71
+ })
72
+ end
73
+
74
+ it "should replace dependencies with map" do
75
+ dsl = LockJar::Domain::Dsl.create do
76
+ map 'junit:junit:4.10', "#{TEMP_DIR}"
77
+ jar 'junit:junit:4.10'
78
+ end
79
+
80
+ LockJar.lock( dsl, :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
81
+ lockfile = LockJar.read("#{TEMP_DIR}/Jarfile.lock")
82
+ lockfile.to_hash.should eql({
83
+ "version"=> LockJar::VERSION,
84
+ "maps"=>{"junit:junit:4.10"=>["#{TEMP_DIR}"]},
85
+ "groups"=>{
86
+ "default"=>{
87
+ "dependencies"=>["junit:junit:jar:4.10", "org.hamcrest:hamcrest-core:jar:1.1"],
88
+ "artifacts"=>[{
89
+ "jar:junit:junit:jar:4.10"=>{
90
+ "transitive"=>{"org.hamcrest:hamcrest-core:jar:1.1"=>{}}}
91
+ }]
92
+ }
93
+ },
94
+ "remote_repositories" => ["http://mirrors.ibiblio.org/pub/mirrors/maven2", "http://repository.jboss.org/nexus/content/groups/public-jboss"]
95
+ })
96
+ end
97
+
98
+ it "should exclude excludes from dependencies" do
99
+ dsl = LockJar::Domain::Dsl.create do
100
+ exclude 'commons-logging', 'logkit'
101
+ jar 'opensymphony:oscache:jar:2.4.1'
102
+ end
103
+
104
+ LockJar.lock( dsl, :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
105
+ File.exists?( "#{TEMP_DIR}/Jarfile.lock" ).should be_true
106
+ lockfile = LockJar.read("#{TEMP_DIR}/Jarfile.lock")
107
+ lockfile.to_hash.should eql({
108
+ "version"=> LockJar::VERSION,
109
+ "excludes"=>["commons-logging", "logkit"],
110
+ "groups"=>{
111
+ "default"=>{
112
+ "dependencies"=>[
113
+ "avalon-framework:avalon-framework:jar:4.1.3", "javax.jms:jms:jar:1.1",
114
+ "javax.servlet:servlet-api:jar:2.3", "log4j:log4j:jar:1.2.12",
115
+ "opensymphony:oscache:jar:2.4.1"],
116
+ "artifacts"=>[{
117
+ "jar:opensymphony:oscache:jar:2.4.1"=>{
118
+ "transitive"=>{
119
+ "commons-logging:commons-logging:jar:1.1"=>{
120
+ "logkit:logkit:jar:1.0.1"=>{},
121
+ "log4j:log4j:jar:1.2.12"=>{},
122
+ "avalon-framework:avalon-framework:jar:4.1.3"=>{}
123
+ },
124
+ "javax.jms:jms:jar:1.1"=>{},
125
+ "javax.servlet:servlet-api:jar:2.3"=>{}
126
+ }
127
+ }
128
+ }]
129
+ }
130
+ },
131
+ "remote_repositories" => ["http://mirrors.ibiblio.org/pub/mirrors/maven2", "http://repository.jboss.org/nexus/content/groups/public-jboss"]
132
+ })
133
+
134
+ end
135
+
136
+
137
+ it "should lock using a block" do
138
+ LockJar.lock( :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/NoRepoJarfile.lock" ) do
139
+ jar "org.eclipse.jetty:jetty-servlet:8.1.3.v20120416"
140
+ end
141
+
142
+ File.exists?( "#{TEMP_DIR}/NoRepoJarfile.lock" ).should be_true
143
+
144
+ lockfile = LockJar.read("#{TEMP_DIR}/NoRepoJarfile.lock")
145
+ lockfile.to_hash.should eql({
146
+ "version"=> LockJar::VERSION,
147
+ "groups"=>{
148
+ "default"=>{
149
+ "dependencies"=>["org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016",
150
+ "org.eclipse.jetty:jetty-continuation:jar:8.1.3.v20120416",
151
+ "org.eclipse.jetty:jetty-http:jar:8.1.3.v20120416",
152
+ "org.eclipse.jetty:jetty-io:jar:8.1.3.v20120416",
153
+ "org.eclipse.jetty:jetty-security:jar:8.1.3.v20120416",
154
+ "org.eclipse.jetty:jetty-server:jar:8.1.3.v20120416",
155
+ "org.eclipse.jetty:jetty-servlet:jar:8.1.3.v20120416",
156
+ "org.eclipse.jetty:jetty-util:jar:8.1.3.v20120416"],
157
+ "artifacts"=>[{
158
+ "jar:org.eclipse.jetty:jetty-servlet:jar:8.1.3.v20120416"=>{
159
+ "transitive"=>{
160
+ "org.eclipse.jetty:jetty-security:jar:8.1.3.v20120416"=>{
161
+ "org.eclipse.jetty:jetty-server:jar:8.1.3.v20120416"=>{
162
+ "org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016"=>{},
163
+ "org.eclipse.jetty:jetty-continuation:jar:8.1.3.v20120416"=>{},
164
+ "org.eclipse.jetty:jetty-http:jar:8.1.3.v20120416"=>{
165
+ "org.eclipse.jetty:jetty-io:jar:8.1.3.v20120416"=>{
166
+ "org.eclipse.jetty:jetty-util:jar:8.1.3.v20120416"=>{}
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }]
174
+ }
175
+ }
176
+ })
177
+ end
178
+ end
179
+
180
+ describe LockJar, "#install" do
181
+ it "should install jars" do
182
+
183
+ LockJar.lock( "spec/fixtures/Jarfile", :download_artifacts => false, :local_repo => "#{TEMP_DIR}/test-repo-install", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
184
+
185
+ jars = LockJar.install( "#{TEMP_DIR}/Jarfile.lock", ['default'], :local_repo => "#{TEMP_DIR}/test-repo-install" )
186
+ jars.should eql([
187
+ File.expand_path("#{TEMP_DIR}/test-repo-install/ch/qos/logback/logback-classic/0.9.24/logback-classic-0.9.24.jar"),
188
+ File.expand_path("#{TEMP_DIR}/test-repo-install/ch/qos/logback/logback-core/0.9.24/logback-core-0.9.24.jar"),
189
+ File.expand_path("#{TEMP_DIR}/test-repo-install/com/metapossum/metapossum-scanner/1.0/metapossum-scanner-1.0.jar"),
190
+ File.expand_path("#{TEMP_DIR}/test-repo-install/com/slackworks/modelcitizen/0.2.2/modelcitizen-0.2.2.jar"),
191
+ File.expand_path("#{TEMP_DIR}/test-repo-install/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar"),
192
+ File.expand_path("#{TEMP_DIR}/test-repo-install/commons-io/commons-io/1.4/commons-io-1.4.jar"),
193
+ File.expand_path("#{TEMP_DIR}/test-repo-install/commons-lang/commons-lang/2.6/commons-lang-2.6.jar"),
194
+ File.expand_path("#{TEMP_DIR}/test-repo-install/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"),
195
+ File.expand_path("#{TEMP_DIR}/test-repo-install/org/apache/mina/mina-core/2.0.4/mina-core-2.0.4.jar"),
196
+ File.expand_path("#{TEMP_DIR}/test-repo-install/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar")
197
+ ])
198
+ end
199
+
200
+ end
201
+
202
+ describe LockJar, "#register_jarfile" do
203
+ after do
204
+ LockJar.reset_registered_jarfiles
205
+ end
206
+
207
+ it 'should add an existing jarfiles in order' do
208
+ LockJar.register_jarfile "spec/fixtures/Jarfile"
209
+ LockJar.register_jarfile "spec/fixtures/Jarfile2"
210
+ LockJar.registered_jarfiles.should ==
211
+ ["spec/fixtures/Jarfile", "spec/fixtures/Jarfile2"]
212
+ end
213
+
214
+ it 'should not add a missing jarfile' do
215
+ proc {
216
+ LockJar.register_jarfile "spec/fixtures/NotAJarfile"
217
+ }.should raise_exception(RuntimeError,
218
+ "Jarfile not found: spec/fixtures/NotAJarfile")
219
+ end
220
+ end
221
+
222
+ describe LockJar, "#lock_registered_jarfiles" do
223
+ after do
224
+ LockJar.reset_registered_jarfiles
225
+ end
226
+
227
+ it 'should work with no jarfiles' do
228
+ lockfile = "#{TEMP_DIR}/LRJJarfile1.lock"
229
+ File.unlink lockfile if File.exists? lockfile
230
+ result = LockJar.lock_registered_jarfiles lockfile: lockfile
231
+ result.should be_nil
232
+ File.exists?(lockfile).should be_false
233
+ end
234
+
235
+ it 'should merge all jarfiles' do
236
+ LockJar.register_jarfile "spec/fixtures/Jarfile"
237
+ LockJar.register_jarfile "spec/fixtures/Jarfile2"
238
+ lockfile = "#{TEMP_DIR}/LRJJarfile2.lock"
239
+ File.unlink lockfile if File.exists? lockfile
240
+ result = LockJar.lock_registered_jarfiles lockfile: lockfile
241
+ artifacts = result.to_hash['groups']['default']['artifacts'].flat_map { |a| a.keys }
242
+ artifacts.should == [
243
+ "jar:org.apache.mina:mina-core:jar:2.0.4",
244
+ "pom:spec/pom.xml",
245
+ "jar:org.eclipse.jetty:jetty-servlet:jar:8.1.3.v20120416"
246
+ ]
247
+ File.exists?(lockfile).should be_true
248
+ end
249
+ end
250
+
251
+ describe LockJar, "#list" do
252
+ it "should list jars" do
253
+
254
+ LockJar.lock( "spec/fixtures/Jarfile", :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
255
+
256
+ jars = LockJar.list( "#{TEMP_DIR}/Jarfile.lock", ['default', 'development', 'bad scope'], :local_repo => "#{TEMP_DIR}/test-repo" )
257
+ jars.should eql([
258
+ "ch.qos.logback:logback-classic:jar:0.9.24", "ch.qos.logback:logback-core:jar:0.9.24",
259
+ "com.metapossum:metapossum-scanner:jar:1.0", "com.slackworks:modelcitizen:jar:0.2.2",
260
+ "commons-beanutils:commons-beanutils:jar:1.8.3", "commons-io:commons-io:jar:1.4",
261
+ "commons-lang:commons-lang:jar:2.6", "commons-logging:commons-logging:jar:1.1.1",
262
+ "org.apache.mina:mina-core:jar:2.0.4",
263
+ "org.slf4j:slf4j-api:jar:1.6.1", "spec/fixtures/naether-0.13.0.jar", "com.typesafe:config:jar:0.5.0" ])
264
+ end
265
+
266
+ it "should replace dependencies with maps" do
267
+ dsl = LockJar::Domain::Dsl.create do
268
+ map 'junit:junit', "#{TEMP_DIR}"
269
+ jar 'junit:junit:4.10'
270
+ end
271
+
272
+ LockJar.lock( dsl, :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/ListJarfile.lock")
273
+ paths = LockJar.list( "#{TEMP_DIR}/ListJarfile.lock", :local_repo => "#{TEMP_DIR}/test-repo" )
274
+ paths.should eql( [ "#{TEMP_DIR}", "org.hamcrest:hamcrest-core:jar:1.1"] )
275
+ end
276
+
277
+ it "should replace dependencies with maps and get local paths" do
278
+ dsl = LockJar::Domain::Dsl.create do
279
+ map 'junit:junit', "#{TEMP_DIR}"
280
+ jar 'junit:junit:4.10'
281
+ end
282
+
283
+ LockJar.lock( dsl, :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/ListJarfile.lock" )
284
+ paths = LockJar.list( "#{TEMP_DIR}/ListJarfile.lock", :local_repo => "#{TEMP_DIR}/test-repo" )
285
+ paths.should eql( [ "#{TEMP_DIR}", "org.hamcrest:hamcrest-core:jar:1.1"] )
286
+ end
287
+ end
288
+
289
+ describe LockJar, "#load" do
290
+ it "by Jarfile.lock" do
291
+ if Naether.platform == 'java'
292
+ lambda { java_import 'org.apache.mina.core.IoUtil' }.should raise_error
293
+ else
294
+ lambda { Rjb::import('org.apache.mina.core.IoUtil') }.should raise_error
295
+ end
296
+
297
+
298
+ LockJar.lock( "spec/fixtures/Jarfile", :local_repo => "#{TEMP_DIR}/test-repo", :lockfile => "#{TEMP_DIR}/Jarfile.lock" )
299
+
300
+ jars = LockJar.load( "#{TEMP_DIR}/Jarfile.lock", ['default'], :local_repo => "#{TEMP_DIR}/test-repo" )
301
+ LockJar::Registry.instance.lockfile_registered?( "#{TEMP_DIR}/Jarfile.lock" ).should be_false
302
+
303
+ jars.should eql([
304
+ "spec/fixtures/naether-0.13.0.jar",
305
+ File.expand_path("#{TEMP_DIR}/test-repo/ch/qos/logback/logback-classic/0.9.24/logback-classic-0.9.24.jar"),
306
+ File.expand_path("#{TEMP_DIR}/test-repo/ch/qos/logback/logback-core/0.9.24/logback-core-0.9.24.jar"),
307
+ File.expand_path("#{TEMP_DIR}/test-repo/com/metapossum/metapossum-scanner/1.0/metapossum-scanner-1.0.jar"),
308
+ File.expand_path("#{TEMP_DIR}/test-repo/com/slackworks/modelcitizen/0.2.2/modelcitizen-0.2.2.jar"),
309
+ File.expand_path("#{TEMP_DIR}/test-repo/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar"),
310
+ File.expand_path("#{TEMP_DIR}/test-repo/commons-io/commons-io/1.4/commons-io-1.4.jar"),
311
+ File.expand_path("#{TEMP_DIR}/test-repo/commons-lang/commons-lang/2.6/commons-lang-2.6.jar"),
312
+ File.expand_path("#{TEMP_DIR}/test-repo/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"),
313
+ File.expand_path("#{TEMP_DIR}/test-repo/org/apache/mina/mina-core/2.0.4/mina-core-2.0.4.jar"),
314
+ File.expand_path("#{TEMP_DIR}/test-repo/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar"),
315
+ ])
316
+ if Naether.platform == 'java'
317
+ lambda { java_import 'org.apache.mina.core.IoUtil' }.should_not raise_error
318
+ else
319
+ lambda { Rjb::import('org.apache.mina.core.IoUtil') }.should_not raise_error
320
+ end
321
+
322
+
323
+ end
324
+
325
+ it "by block with resolve option" do
326
+ if Naether.platform == 'java'
327
+ lambda { java_import 'org.modeshape.common.math.Duration' }.should raise_error
328
+ else
329
+ lambda { Rjb::import('org.modeshape.common.math.Duration') }.should raise_error
330
+ end
331
+
332
+ jars = LockJar.load(:local_repo => TEST_REPO, :resolve => true) do
333
+ jar 'org.modeshape:modeshape-common:3.4.0.Final'
334
+ end
335
+
336
+ jars.should eql( [File.expand_path(TEST_REPO + "/org/modeshape/modeshape-common/3.4.0.Final/modeshape-common-3.4.0.Final.jar")] )
337
+
338
+ if Naether.platform == 'java'
339
+ lambda { java_import 'org.modeshape.common.math.Duration' }.should_not raise_error
340
+ else
341
+ lambda { Rjb::import('org.modeshape.common.math.Duration') }.should_not raise_error
342
+ end
343
+ end
344
+ end
345
+
346
+ describe LockJar, "#extract_args" do
347
+ # Certain argument combinations can't really be tested
348
+
349
+ it 'should have the right defaults for :lockfile' do
350
+ LockJar.send(:extract_args, :lockfile, []).should == ['Jarfile.lock', ['default'], {}]
351
+ end
352
+
353
+ it 'should have the right defaults for :jarfile' do
354
+ LockJar.send(:extract_args, :jarfile, []).should == ['Jarfile', ['default'], {}]
355
+ end
356
+
357
+ it 'should not have a default filename if a block is given' do
358
+ blk = proc {}
359
+ LockJar.send(:extract_args, :jarfile, [], &blk).should == [nil, ['default'], {}]
360
+ LockJar.send(:extract_args, :lockfile, [], &blk).should == [nil, ['default'], {}]
361
+ end
362
+
363
+ it 'should use the :lockfile opt when lockfile is requested' do
364
+ LockJar.send(:extract_args, :lockfile, [{lockfile: "LF"}]).should == ["LF", ['default'], {lockfile: "LF"}]
365
+ end
366
+ it 'should not use the :lockfile opt when jarfile is requested' do
367
+ LockJar.send(:extract_args, :jarfile, [{lockfile: "LF"}]).should == ["Jarfile", ['default'], {lockfile: "LF"}]
368
+ end
369
+ it 'should not use the :lockfile opt when a lockfile provided' do
370
+ LockJar.send(:extract_args, :lockfile, ["MyLF", {lockfile: "LF"}]).should == ["MyLF", ['default'], {lockfile: "LF"}]
371
+ end
372
+ end