lock_jar 0.10.0 → 0.10.2

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.
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