lock_jar 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/README.rdoc +39 -18
- data/VERSION +1 -1
- data/lib/lock_jar/buildr.rb +9 -6
- data/lib/lock_jar/bundler.rb +2 -0
- data/lib/lock_jar/dsl.rb +36 -20
- data/lib/lock_jar/resolver.rb +29 -3
- data/lib/lock_jar/runtime.rb +42 -6
- data/lib/lock_jar.rb +8 -0
- data/lock_jar.gemspec +6 -6
- data/spec/lock_jar/bundler_spec.rb +19 -11
- data/spec/lock_jar/dsl_spec.rb +1 -1
- data/spec/lock_jar/maven_spec.rb +1 -1
- data/spec/lock_jar/resolver_spec.rb +11 -4
- data/spec/lock_jar/runtime_spec.rb +2 -2
- data/spec/lock_jar_spec.rb +55 -9
- data/spec/spec_helper.rb +6 -1
- metadata +14 -14
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -16,14 +16,15 @@ gem install lock_jar
|
|
16
16
|
=== Using a Jarfile
|
17
17
|
|
18
18
|
==== Jarfile
|
19
|
-
|
19
|
+
|
20
|
+
A Jarfile is a simple file using a Ruby DSL for defining a project's dependencies using the following
|
20
21
|
methods:
|
21
22
|
|
22
23
|
* local: Set the local Maven repository
|
23
|
-
* repository: Add url of additional Maven repository
|
24
|
-
* jar: Add Jar dependency in artifact notation
|
25
|
-
* pom: Add local path to a Maven pom
|
26
|
-
* scope:
|
24
|
+
* repository: Add url of additional remote Maven repository.
|
25
|
+
* jar: Add Jar dependency in artifact notation, default scope is *compile*
|
26
|
+
* pom: Add local path to a Maven pom, default is to load dependencies for all scopes.
|
27
|
+
* scope: Set the scope for nested jar or pom.
|
27
28
|
|
28
29
|
Example Jarfile
|
29
30
|
|
@@ -43,7 +44,7 @@ Example Jarfile
|
|
43
44
|
|
44
45
|
==== Resolving dependencies
|
45
46
|
|
46
|
-
When the Jarfile is locked, the transitive dependencies for the Jars and
|
47
|
+
When the Jarfile is locked, the transitive dependencies for the Jars and POM are resolved and saved to the Jarfile.lock file.
|
47
48
|
|
48
49
|
Example of locking a Jarfile to a Jarfile.lock
|
49
50
|
|
@@ -101,34 +102,45 @@ or directly load all Jars into the classpath
|
|
101
102
|
|
102
103
|
Do not forget, if you change your Jarfile, you have to re-generate the Jarfile.lock.
|
103
104
|
|
104
|
-
|
105
|
+
==== Skipping the Jarfile
|
105
106
|
|
106
|
-
You can skip the Jarfile and directly load dependencies by passing a block to LockJar.load
|
107
|
+
You can skip the Jarfile and Jarfile.lock to directly load dependencies by passing a block to LockJar.load
|
107
108
|
|
108
109
|
LockJar.load do
|
109
110
|
jar 'org.eclipse.jetty:example-jetty-embedded:jar:8.1.2.v20120308'
|
110
111
|
end
|
111
112
|
|
113
|
+
Since you skipped the locking part, mostly likely you will need to resolve the dependences in the block, just pass the
|
114
|
+
:resolve => true option to enable dependency resolution.
|
115
|
+
|
116
|
+
LockJar.load( :resolve => true ) do
|
117
|
+
jar 'org.eclipse.jetty:example-jetty-embedded:jar:8.1.2.v20120308'
|
118
|
+
end
|
119
|
+
|
112
120
|
=== Bundler Integration
|
113
121
|
|
114
122
|
LockJar integrates with {Bundler}[https://github.com/carlhuda/bundler/] by {modifying}[https://github.com/mguymon/lock_jar/blob/master/lib/lock_jar/bundler.rb] the Bundler
|
115
|
-
DSL to include LockJar's DSL, generating a Jarfile.lock when Bundler locks, and populating the classpath
|
116
|
-
when Bundler requires.
|
123
|
+
DSL to include LockJar's DSL, generating a Jarfile.lock when Bundler locks, and populating the classpath when Bundler requires.
|
117
124
|
|
118
125
|
==== Example
|
119
126
|
|
120
127
|
The following Gemfile with LockJar
|
121
128
|
|
122
|
-
|
129
|
+
# This is what modifies Bundler to trigger LockJar
|
130
|
+
require 'lock_jar/bundler'
|
123
131
|
|
124
132
|
gem "naether"
|
133
|
+
|
134
|
+
group :development do
|
135
|
+
gem "rspec", "~> 2.9.0"
|
136
|
+
end
|
125
137
|
|
126
138
|
# lockjar dsl that is used to generate Jarfile.lock
|
127
139
|
lock_jar do
|
128
140
|
scope :test do
|
129
|
-
|
130
|
-
|
131
|
-
|
141
|
+
jar 'junit:junit:jar:4.10'
|
142
|
+
end
|
143
|
+
|
132
144
|
pom 'spec/pom.xml', :scope => :compile
|
133
145
|
end
|
134
146
|
|
@@ -136,12 +148,20 @@ Will produce a Gemfile.lock and Jarfile.lock for
|
|
136
148
|
|
137
149
|
bundle install
|
138
150
|
|
139
|
-
When
|
151
|
+
When Bundler.setup or Bundler.require is called, the jars from the Jarfile.lock are loaded into the classpath.
|
152
|
+
|
153
|
+
require 'rubygems'
|
154
|
+
require 'bundler'
|
155
|
+
|
156
|
+
# This is what modifies Bundler to trigger LockJar
|
157
|
+
require 'lock_jar/bundler'
|
158
|
+
|
159
|
+
Bundler.require
|
140
160
|
|
141
161
|
=== Buildr Integration
|
142
162
|
|
143
163
|
LockJar integrates with {Buildr}[http://buildr.apache.org/] using an {Addon}[https://github.com/mguymon/lock_jar/blob/master/lib/lock_jar/buildr.rb].
|
144
|
-
This allows the Jarfile to be defined directly into a buildfile. A global
|
164
|
+
This allows the Jarfile to be defined directly into a buildfile. A global LockJar definition can be set and
|
145
165
|
is inherited to all projects. Each project may have its own LockJar definition. A lock file is generated per project based
|
146
166
|
on the project name.
|
147
167
|
|
@@ -153,8 +173,9 @@ and a task per project to generate the lockfile for a single project
|
|
153
173
|
|
154
174
|
buildr <app>:<project>:lock_jar:lock
|
155
175
|
|
156
|
-
The
|
157
|
-
|
176
|
+
The compile scoped dependencies are automatically added to the classpath for compiling. The test scoped dependencies are
|
177
|
+
automatically added to the classpath for tests. Do not forget, if you change the lock_jar
|
178
|
+
definitions, you have to rerun the *lock_jar:lock* task.
|
158
179
|
|
159
180
|
|
160
181
|
==== Example
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/lock_jar/buildr.rb
CHANGED
@@ -18,16 +18,18 @@ require 'lock_jar/dsl'
|
|
18
18
|
|
19
19
|
module Buildr
|
20
20
|
|
21
|
-
attr_reader :global_lockjar_dsl
|
22
|
-
|
23
21
|
class << self
|
24
22
|
def project_to_lockfile( project )
|
25
23
|
"#{project.name.gsub(/:/,'-')}.lock"
|
26
24
|
end
|
25
|
+
|
26
|
+
def global_lockjar_dsl
|
27
|
+
@@global_lockjar_dsl
|
28
|
+
end
|
27
29
|
end
|
28
30
|
|
29
31
|
def lock_jar( &blk )
|
30
|
-
|
32
|
+
@@global_lockjar_dsl = ::LockJar::Dsl.evaluate(&blk)
|
31
33
|
end
|
32
34
|
|
33
35
|
namespace "lock_jar" do
|
@@ -47,8 +49,9 @@ module Buildr
|
|
47
49
|
|
48
50
|
def lock_jar( &blk )
|
49
51
|
@lockjar_dsl = ::LockJar::Dsl.evaluate(&blk)
|
50
|
-
|
51
|
-
|
52
|
+
|
53
|
+
unless Buildr.global_lockjar_dsl.nil?
|
54
|
+
@lockjar_dsl.merge( Buildr.global_lockjar_dsl )
|
52
55
|
end
|
53
56
|
end
|
54
57
|
|
@@ -57,7 +60,7 @@ module Buildr
|
|
57
60
|
end
|
58
61
|
|
59
62
|
def lockjar_dsl
|
60
|
-
@lockjar_dsl || global_lockjar_dsl
|
63
|
+
@lockjar_dsl || Buildr.global_lockjar_dsl
|
61
64
|
end
|
62
65
|
|
63
66
|
after_define do |project|
|
data/lib/lock_jar/bundler.rb
CHANGED
data/lib/lock_jar/dsl.rb
CHANGED
@@ -20,6 +20,7 @@ module LockJar
|
|
20
20
|
attr_reader :repositories
|
21
21
|
attr_reader :local_repository
|
22
22
|
attr_reader :scopes
|
23
|
+
attr_reader :maps
|
23
24
|
|
24
25
|
class << self
|
25
26
|
|
@@ -61,10 +62,7 @@ module LockJar
|
|
61
62
|
@present_scope = 'compile'
|
62
63
|
|
63
64
|
@local_repository = nil
|
64
|
-
|
65
|
-
|
66
|
-
def local( path )
|
67
|
-
@local_repository = path
|
65
|
+
@maps = {}
|
68
66
|
end
|
69
67
|
|
70
68
|
def jar(notation, *args)
|
@@ -75,6 +73,34 @@ module LockJar
|
|
75
73
|
|
76
74
|
artifact( notation, opts )
|
77
75
|
end
|
76
|
+
|
77
|
+
def local( path )
|
78
|
+
@local_repository = path
|
79
|
+
end
|
80
|
+
|
81
|
+
def merge( dsl )
|
82
|
+
@repositories = (@repositories + dsl.repositories).uniq
|
83
|
+
|
84
|
+
dsl.notations.each do |scope, notations|
|
85
|
+
@notations[scope] = (@notations[scope] + notations).uniq
|
86
|
+
end
|
87
|
+
|
88
|
+
dsl.maps.each do |notation,paths|
|
89
|
+
existing_map = @maps[notation]
|
90
|
+
if existing_map
|
91
|
+
@maps[notation] = (existing_map + paths).uniq
|
92
|
+
else
|
93
|
+
@maps[notation] = paths
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
self
|
98
|
+
end
|
99
|
+
|
100
|
+
# Map a dependency to another dependency or local directory.
|
101
|
+
def map( notation, *args )
|
102
|
+
@maps[notation] = args
|
103
|
+
end
|
78
104
|
|
79
105
|
# Pom default to all scopes, unless nested in a scope
|
80
106
|
def pom(path, *args)
|
@@ -91,11 +117,15 @@ module LockJar
|
|
91
117
|
|
92
118
|
artifact( path, opts )
|
93
119
|
end
|
120
|
+
|
121
|
+
def read_file(file)
|
122
|
+
File.open(file, "rb") { |f| f.read }
|
123
|
+
end
|
94
124
|
|
95
125
|
def repository( url, opts = {} )
|
96
126
|
@repositories << url
|
97
127
|
end
|
98
|
-
|
128
|
+
|
99
129
|
def scope(*scopes, &blk)
|
100
130
|
@scope_changed = true
|
101
131
|
scopes.each do |scope|
|
@@ -104,22 +134,8 @@ module LockJar
|
|
104
134
|
end
|
105
135
|
@scope_changed = false
|
106
136
|
@present_scope = 'compile'
|
107
|
-
end
|
137
|
+
end
|
108
138
|
|
109
|
-
def read_file(file)
|
110
|
-
File.open(file, "rb") { |f| f.read }
|
111
|
-
end
|
112
|
-
|
113
|
-
def merge( dsl )
|
114
|
-
@repositories = (@repositories + dsl.repositories).uniq
|
115
|
-
|
116
|
-
dsl.notations.each do |scope, notations|
|
117
|
-
@notations[scope] = (@notations[scope] + notations).uniq
|
118
|
-
end
|
119
|
-
|
120
|
-
self
|
121
|
-
end
|
122
|
-
|
123
139
|
private
|
124
140
|
def artifact(artifact, opts)
|
125
141
|
|
data/lib/lock_jar/resolver.rb
CHANGED
@@ -63,11 +63,37 @@ module LockJar
|
|
63
63
|
@naether.dependenciesNotation
|
64
64
|
end
|
65
65
|
|
66
|
-
def
|
67
|
-
|
66
|
+
def to_local_paths( notations )
|
67
|
+
paths = []
|
68
|
+
notations.each do |notation|
|
69
|
+
if File.directory?(notation)
|
70
|
+
paths << notation
|
71
|
+
else
|
72
|
+
paths = paths + @naether.to_local_paths( [notation] )
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
paths
|
77
|
+
end
|
78
|
+
|
79
|
+
def load_to_classpath( notations )
|
80
|
+
dirs = []
|
81
|
+
jars = []
|
82
|
+
|
83
|
+
notations.each do |notation|
|
84
|
+
if File.directory?(notation)
|
85
|
+
dirs << notation
|
86
|
+
else
|
87
|
+
jars << notation
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
Naether::Java.load_paths( dirs )
|
92
|
+
|
93
|
+
jars = @naether.to_local_paths( jars )
|
68
94
|
Naether::Java.load_jars( jars )
|
69
95
|
|
70
|
-
jars
|
96
|
+
dirs + jars
|
71
97
|
end
|
72
98
|
end
|
73
99
|
end
|
data/lib/lock_jar/runtime.rb
CHANGED
@@ -27,6 +27,7 @@ module LockJar
|
|
27
27
|
attr_reader :current_resolver
|
28
28
|
|
29
29
|
def resolver( opts = {} )
|
30
|
+
# XXX: opts for a method will cause resolver to reload
|
30
31
|
if @current_resolver.nil? || opts != @current_resolver.opts
|
31
32
|
@current_resolver = LockJar::Resolver.new( opts )
|
32
33
|
end
|
@@ -35,6 +36,7 @@ module LockJar
|
|
35
36
|
end
|
36
37
|
|
37
38
|
def lock( jarfile, opts = {} )
|
39
|
+
|
38
40
|
lock_jar_file = nil
|
39
41
|
|
40
42
|
if jarfile.is_a? LockJar::Dsl
|
@@ -61,7 +63,11 @@ module LockJar
|
|
61
63
|
if lock_jar_file.repositories.size > 0
|
62
64
|
lock_data['repositories'] = lock_jar_file.repositories
|
63
65
|
end
|
64
|
-
|
66
|
+
|
67
|
+
if lock_jar_file.maps.size > 0
|
68
|
+
lock_data['maps'] = lock_jar_file.maps
|
69
|
+
end
|
70
|
+
|
65
71
|
lock_data['scopes'] = {}
|
66
72
|
|
67
73
|
lock_jar_file.notations.each do |scope, notations|
|
@@ -73,6 +79,7 @@ module LockJar
|
|
73
79
|
|
74
80
|
if dependencies.size > 0
|
75
81
|
resolved_notations = resolver(opts).resolve( dependencies )
|
82
|
+
|
76
83
|
lock_data['scopes'][scope] = {
|
77
84
|
'dependencies' => notations,
|
78
85
|
'resolved_dependencies' => resolved_notations }
|
@@ -86,17 +93,45 @@ module LockJar
|
|
86
93
|
|
87
94
|
def list( jarfile_lock, scopes = ['compile', 'runtime'], opts = {}, &blk )
|
88
95
|
dependencies = []
|
89
|
-
|
96
|
+
maps = []
|
97
|
+
|
90
98
|
if jarfile_lock
|
91
|
-
|
99
|
+
lockfile = read_lockfile( jarfile_lock)
|
100
|
+
dependencies += lockfile_dependencies( lockfile, scopes )
|
101
|
+
maps = lockfile['maps']
|
92
102
|
end
|
93
103
|
|
94
104
|
unless blk.nil?
|
95
105
|
dsl = LockJar::Dsl.evaluate(&blk)
|
96
106
|
dependencies += dsl_dependencies( dsl, scopes )
|
107
|
+
maps = dsl.maps
|
97
108
|
end
|
98
109
|
|
99
|
-
|
110
|
+
if maps && maps.size > 0
|
111
|
+
mapped_dependencies = []
|
112
|
+
|
113
|
+
maps.each do |notation, replacements|
|
114
|
+
dependencies.each do |dep|
|
115
|
+
if dep =~ /#{notation}/
|
116
|
+
replacements.each do |replacement|
|
117
|
+
mapped_dependencies << replacement
|
118
|
+
end
|
119
|
+
else
|
120
|
+
mapped_dependencies << dep
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
dependencies = mapped_dependencies
|
126
|
+
end
|
127
|
+
|
128
|
+
if opts[:local_paths]
|
129
|
+
opts.delete( :local_paths ) # remove list opts so resolver is not reset
|
130
|
+
resolver(opts).to_local_paths( dependencies.uniq )
|
131
|
+
|
132
|
+
else
|
133
|
+
dependencies.uniq
|
134
|
+
end
|
100
135
|
end
|
101
136
|
|
102
137
|
def load( jarfile_lock, scopes = ['compile', 'runtime'], opts = {}, &blk )
|
@@ -122,14 +157,15 @@ module LockJar
|
|
122
157
|
dependencies = resolver(opts).resolve( dependencies )
|
123
158
|
end
|
124
159
|
|
125
|
-
resolver(opts).
|
160
|
+
resolver(opts).load_to_classpath( dependencies )
|
126
161
|
end
|
127
162
|
|
128
|
-
private
|
129
163
|
def read_lockfile( jarfile_lock )
|
130
164
|
YAML.load_file( jarfile_lock )
|
131
165
|
end
|
132
166
|
|
167
|
+
private
|
168
|
+
|
133
169
|
def lockfile_dependencies( lockfile, scopes)
|
134
170
|
dependencies = []
|
135
171
|
|
data/lib/lock_jar.rb
CHANGED
@@ -21,6 +21,10 @@ require 'lock_jar/runtime'
|
|
21
21
|
|
22
22
|
module LockJar
|
23
23
|
|
24
|
+
def self.config( opts )
|
25
|
+
Runtime.instance.resolver( opts )
|
26
|
+
end
|
27
|
+
|
24
28
|
# Lock a Jarfile and generate a Jarfile.lock
|
25
29
|
#
|
26
30
|
# Accepts path to the jarfile and hash of options to configure LockJar
|
@@ -80,5 +84,9 @@ module LockJar
|
|
80
84
|
|
81
85
|
Runtime.instance.load( lockfile, scopes, opts, &blk )
|
82
86
|
end
|
87
|
+
|
88
|
+
def self.read( lockfile )
|
89
|
+
Runtime.instance.read_lockfile( lockfile )
|
90
|
+
end
|
83
91
|
|
84
92
|
end
|
data/lock_jar.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "lock_jar"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Guymon"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-05-09"
|
13
13
|
s.description = "Manage Jar files for Ruby. In the spirit of Bundler, a Jarfile\n is used to generate a Jarfile.lock that contains all the resolved jar dependencies for scopes runtime, compile, and test.\n The Jarfile.lock can be used to populate the classpath"
|
14
14
|
s.email = "michael.guymon@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -45,25 +45,25 @@ Gem::Specification.new do |s|
|
|
45
45
|
s.homepage = "http://github.com/mguymon/lock_jar"
|
46
46
|
s.licenses = ["Apache"]
|
47
47
|
s.require_paths = ["lib"]
|
48
|
-
s.rubygems_version = "1.8.
|
48
|
+
s.rubygems_version = "1.8.24"
|
49
49
|
s.summary = "Manage Jar files for Ruby"
|
50
50
|
|
51
51
|
if s.respond_to? :specification_version then
|
52
52
|
s.specification_version = 3
|
53
53
|
|
54
54
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
55
|
-
s.add_runtime_dependency(%q<naether>, ["~> 0.
|
55
|
+
s.add_runtime_dependency(%q<naether>, ["~> 0.7.0"])
|
56
56
|
s.add_development_dependency(%q<rspec>, ["~> 2.9.0"])
|
57
57
|
s.add_development_dependency(%q<bundler>, ["> 1.0.0"])
|
58
58
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
59
59
|
else
|
60
|
-
s.add_dependency(%q<naether>, ["~> 0.
|
60
|
+
s.add_dependency(%q<naether>, ["~> 0.7.0"])
|
61
61
|
s.add_dependency(%q<rspec>, ["~> 2.9.0"])
|
62
62
|
s.add_dependency(%q<bundler>, ["> 1.0.0"])
|
63
63
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
64
64
|
end
|
65
65
|
else
|
66
|
-
s.add_dependency(%q<naether>, ["~> 0.
|
66
|
+
s.add_dependency(%q<naether>, ["~> 0.7.0"])
|
67
67
|
s.add_dependency(%q<rspec>, ["~> 2.9.0"])
|
68
68
|
s.add_dependency(%q<bundler>, ["> 1.0.0"])
|
69
69
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
@@ -1,16 +1,22 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper'))
|
2
|
+
|
2
3
|
require 'rubygems'
|
3
4
|
require 'bundler'
|
4
5
|
require 'lib/lock_jar/bundler'
|
5
6
|
require 'helper/bundler_helper'
|
7
|
+
require 'fileutils'
|
6
8
|
|
7
9
|
describe Bundler do
|
8
10
|
include BundlerHelper
|
9
11
|
|
12
|
+
before(:all) do
|
13
|
+
FileUtils.rm_rf( bundled_app ) if File.exists? bundled_app
|
14
|
+
FileUtils.mkdir_p tmp('bundler')
|
15
|
+
end
|
16
|
+
|
10
17
|
before(:each) do
|
11
18
|
gemfile <<-G
|
12
19
|
require 'lock_jar/bundler'
|
13
|
-
source "file://#{tmp('bundler')}"
|
14
20
|
gem "naether"
|
15
21
|
|
16
22
|
lock_jar do
|
@@ -33,14 +39,13 @@ describe Bundler do
|
|
33
39
|
end
|
34
40
|
|
35
41
|
it "provides a list of the jar and pom dependencies" do
|
36
|
-
Bundler.load.lock_jar.notations.should eql( {"compile"=>["
|
42
|
+
Bundler.load.lock_jar.notations.should eql( {"compile"=>[File.expand_path(File.join(File.dirname(__FILE__), "../../spec/pom.xml"))], "runtime"=>[], "test"=>["junit:junit:jar:4.10"]} )
|
37
43
|
end
|
38
44
|
|
39
45
|
it "should create Jarfile.lock with bundle install" do
|
40
46
|
File.delete( bundled_app("Jarfile.lock") ) if File.exists? bundled_app("Jarfile.lock")
|
41
47
|
install_gemfile <<-G
|
42
48
|
require 'lock_jar/bundler'
|
43
|
-
source "file://#{tmp('bundler')}"
|
44
49
|
gem "naether"
|
45
50
|
|
46
51
|
lock_jar do
|
@@ -52,10 +57,9 @@ describe Bundler do
|
|
52
57
|
end
|
53
58
|
|
54
59
|
G
|
60
|
+
File.exists?( bundled_app("Jarfile.lock") ).should be_true
|
55
61
|
|
56
|
-
File.
|
57
|
-
|
58
|
-
IO.read( File.join(root,'spec', 'BundlerJarfile.lock') ).should eql( IO.read( bundled_app("Jarfile.lock") ) )
|
62
|
+
LockJar.read( File.join(root,'spec', 'BundlerJarfile.lock') ).should eql( LockJar.read( bundled_app("Jarfile.lock") ) )
|
59
63
|
end
|
60
64
|
|
61
65
|
it "should create Jarfile.lock with bundle update" do
|
@@ -63,7 +67,7 @@ describe Bundler do
|
|
63
67
|
bundle "update"
|
64
68
|
File.exists?( bundled_app("Jarfile.lock") ).should be_true
|
65
69
|
|
66
|
-
|
70
|
+
LockJar.read( File.join(root,'spec', 'BundlerJarfile.lock') ).should eql( LockJar.read( bundled_app("Jarfile.lock") ) )
|
67
71
|
end
|
68
72
|
|
69
73
|
it "should load Jarfile.lock with Bundle.setup" do
|
@@ -71,12 +75,16 @@ describe Bundler do
|
|
71
75
|
require 'rubygems'
|
72
76
|
require 'bundler'
|
73
77
|
require 'lock_jar/bundler'
|
78
|
+
require 'naether/java'
|
79
|
+
|
80
|
+
LockJar.config( :local_repo => '#{tmp('test-repo')}' )
|
81
|
+
|
74
82
|
Bundler.setup
|
75
83
|
|
76
|
-
puts com.slackworks.modelcitizen.ModelFactory.
|
84
|
+
puts Naether::Java.create('com.slackworks.modelcitizen.ModelFactory').getClass().toString()
|
77
85
|
RUBY
|
78
|
-
err.should eq("")
|
79
|
-
out.should match("
|
86
|
+
# err.should eq("") # 1.9.3 has a IConv error that outputs to std err
|
87
|
+
out.should match("class com.slackworks.modelcitizen.ModelFactory")
|
80
88
|
end
|
81
89
|
|
82
90
|
end
|
data/spec/lock_jar/dsl_spec.rb
CHANGED
data/spec/lock_jar/maven_spec.rb
CHANGED
@@ -1,19 +1,26 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec/spec_helper'
|
2
2
|
require 'lib/lock_jar/resolver'
|
3
3
|
require 'fileutils'
|
4
4
|
require 'naether'
|
5
5
|
|
6
6
|
describe LockJar::Resolver do
|
7
7
|
context "Instance" do
|
8
|
-
|
8
|
+
before(:each) do
|
9
9
|
FileUtils.mkdir_p( 'tmp/test-repo' )
|
10
|
-
resolver = LockJar::Resolver.new( :local_repo => 'tmp/test-repo' )
|
11
|
-
|
10
|
+
@resolver = LockJar::Resolver.new( :local_repo => 'tmp/test-repo' )
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should bootstrap naether" do
|
12
14
|
deps = Naether::Bootstrap.check_local_repo_for_deps( 'tmp/test-repo' )
|
13
15
|
deps[:missing].should eql([])
|
14
16
|
deps[:exists].each do |dep|
|
15
17
|
dep.values[0].should match /.+#{File::SEPARATOR}tmp#{File::SEPARATOR}test-repo#{File::SEPARATOR}.+/
|
16
18
|
end
|
17
19
|
end
|
20
|
+
|
21
|
+
it "should return local paths for notations" do
|
22
|
+
@resolver.to_local_paths( ["junit:junit:jar:4.10"] ).should
|
23
|
+
eql( [File.expand_path("tmp/test-repo/junit/junit/4.10/junit-4.10.jar")] )
|
24
|
+
end
|
18
25
|
end
|
19
26
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec/spec_helper'
|
2
2
|
require 'lib/lock_jar/runtime'
|
3
3
|
|
4
4
|
describe LockJar::Runtime do
|
5
5
|
context "Singleton" do
|
6
6
|
it "should set local repo" do
|
7
7
|
LockJar::Runtime.instance.load( nil ) do
|
8
|
-
jar '
|
8
|
+
jar 'junit:junit:4.10'
|
9
9
|
end
|
10
10
|
|
11
11
|
LockJar::Runtime.instance.current_resolver.naether.local_repo_path.should eql File.expand_path('~/.m2/repository')
|
data/spec/lock_jar_spec.rb
CHANGED
@@ -1,20 +1,64 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'spec_helper'))
|
1
2
|
require 'rubygems'
|
2
3
|
require 'lib/lock_jar'
|
3
4
|
require 'naether'
|
4
5
|
|
5
6
|
describe LockJar do
|
6
7
|
context "Module" do
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
context "lock" do
|
9
|
+
it "should create a lock file" do
|
10
|
+
File.delete( 'tmp/Jarfile.lock' ) if File.exists?( 'tmp/Jarfile.lock' )
|
11
|
+
Dir.mkdir( 'tmp' ) unless File.exists?( 'tmp' )
|
12
|
+
|
13
|
+
LockJar.lock( "spec/Jarfile", :local_repo => 'tmp/test-repo', :lockfile => 'tmp/Jarfile.lock' )
|
14
|
+
File.exists?( 'tmp/Jarfile.lock' ).should be_true
|
15
|
+
end
|
10
16
|
|
11
|
-
|
12
|
-
|
17
|
+
it "should not replace dependencies with maps" do
|
18
|
+
dsl = LockJar::Dsl.evaluate do
|
19
|
+
map 'junit:junit:4.10', 'tmp'
|
20
|
+
jar 'junit:junit:4.10'
|
21
|
+
end
|
22
|
+
|
23
|
+
LockJar.lock( dsl, :local_repo => 'tmp/test-repo', :lockfile => 'tmp/Jarfile.lock' )
|
24
|
+
lockfile = LockJar.read('tmp/Jarfile.lock')
|
25
|
+
lockfile.should eql( {
|
26
|
+
"maps"=>{"junit:junit:4.10"=>["tmp"]},
|
27
|
+
"scopes"=>{
|
28
|
+
"compile"=>{
|
29
|
+
"dependencies"=>["junit:junit:4.10"], "resolved_dependencies"=>["junit:junit:jar:4.10", "org.hamcrest:hamcrest-core:jar:1.1"]}}} )
|
30
|
+
end
|
13
31
|
end
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
32
|
+
|
33
|
+
context "list" do
|
34
|
+
it "should list jars" do
|
35
|
+
LockJar.lock( "spec/Jarfile", :local_repo => 'tmp/test-repo', :lockfile => 'tmp/Jarfile.lock' )
|
36
|
+
|
37
|
+
jars = LockJar.list( 'tmp/Jarfile.lock', ['compile', 'runtime', 'bad scope'], :local_repo => 'tmp/test-repo' )
|
38
|
+
jars.should eql( ["org.apache.mina:mina-core:jar:2.0.4", "org.slf4j:slf4j-api:jar:1.6.1", "com.slackworks:modelcitizen:jar:0.2.2", "commons-lang:commons-lang:jar:2.6", "commons-beanutils:commons-beanutils:jar:1.8.3", "commons-logging:commons-logging:jar:1.1.1", "ch.qos.logback:logback-classic:jar:0.9.24", "ch.qos.logback:logback-core:jar:0.9.24", "com.metapossum:metapossum-scanner:jar:1.0", "commons-io:commons-io:jar:1.4", "junit:junit:jar:4.7", "org.apache.tomcat:servlet-api:jar:6.0.35"] )
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should replace dependencies with maps" do
|
42
|
+
dsl = LockJar::Dsl.evaluate do
|
43
|
+
map 'junit:junit', 'tmp'
|
44
|
+
jar 'junit:junit:4.10'
|
45
|
+
end
|
46
|
+
|
47
|
+
LockJar.lock( dsl, :local_repo => 'tmp/test-repo', :lockfile => 'tmp/ListJarfile.lock' )
|
48
|
+
paths = LockJar.list( 'tmp/ListJarfile.lock', :local_repo => 'tmp/test-repo' )
|
49
|
+
paths.should eql( [ "tmp", "org.hamcrest:hamcrest-core:jar:1.1"] )
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should replace dependencies with maps and get local paths" do
|
53
|
+
dsl = LockJar::Dsl.evaluate do
|
54
|
+
map 'junit:junit', 'tmp'
|
55
|
+
jar 'junit:junit:4.10'
|
56
|
+
end
|
57
|
+
|
58
|
+
LockJar.lock( dsl, :local_repo => 'tmp/test-repo', :lockfile => 'tmp/ListJarfile.lock' )
|
59
|
+
paths = LockJar.list( 'tmp/ListJarfile.lock', :local_repo => 'tmp/test-repo' )
|
60
|
+
paths.should eql( [ "tmp", "org.hamcrest:hamcrest-core:jar:1.1"] )
|
61
|
+
end
|
18
62
|
end
|
19
63
|
|
20
64
|
context "load" do
|
@@ -25,6 +69,8 @@ describe LockJar do
|
|
25
69
|
lambda { Rjb::import('org.apache.mina.core.IoUtil') }.should raise_error
|
26
70
|
end
|
27
71
|
|
72
|
+
LockJar.lock( "spec/Jarfile", :local_repo => 'tmp/test-repo', :lockfile => 'tmp/Jarfile.lock' )
|
73
|
+
|
28
74
|
jars = LockJar.load( 'tmp/Jarfile.lock', ['compile', 'runtime'], :local_repo => 'tmp/test-repo' )
|
29
75
|
|
30
76
|
jars.should eql( [File.expand_path("tmp/test-repo/org/apache/mina/mina-core/2.0.4/mina-core-2.0.4.jar"), File.expand_path("tmp/test-repo/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar"), File.expand_path("tmp/test-repo/com/slackworks/modelcitizen/0.2.2/modelcitizen-0.2.2.jar"), File.expand_path("tmp/test-repo/commons-lang/commons-lang/2.6/commons-lang-2.6.jar"), File.expand_path("tmp/test-repo/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar"), File.expand_path("tmp/test-repo/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"), File.expand_path("tmp/test-repo/ch/qos/logback/logback-classic/0.9.24/logback-classic-0.9.24.jar"), File.expand_path("tmp/test-repo/ch/qos/logback/logback-core/0.9.24/logback-core-0.9.24.jar"), File.expand_path("tmp/test-repo/com/metapossum/metapossum-scanner/1.0/metapossum-scanner-1.0.jar"), File.expand_path("tmp/test-repo/commons-io/commons-io/1.4/commons-io-1.4.jar"), File.expand_path("tmp/test-repo/junit/junit/4.7/junit-4.7.jar"), File.expand_path("tmp/test-repo/org/apache/tomcat/servlet-api/6.0.35/servlet-api-6.0.35.jar")] )
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
|
+
$:.unshift File.expand_path('.')
|
1
2
|
$:.unshift File.expand_path('..', __FILE__)
|
2
|
-
$:.unshift File.expand_path('
|
3
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'rspec'
|
7
|
+
require 'lib/lock_jar'
|
3
8
|
|
4
9
|
RSpec.configure do |config|
|
5
10
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lock_jar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Guymon
|
@@ -15,27 +15,25 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-05-09 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
prerelease: false
|
22
|
-
type: :runtime
|
23
21
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
22
|
none: false
|
25
23
|
requirements:
|
26
24
|
- - ~>
|
27
25
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
26
|
+
hash: 3
|
29
27
|
segments:
|
30
28
|
- 0
|
31
|
-
-
|
29
|
+
- 7
|
32
30
|
- 0
|
33
|
-
version: 0.
|
31
|
+
version: 0.7.0
|
34
32
|
version_requirements: *id001
|
35
33
|
name: naether
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
34
|
prerelease: false
|
38
|
-
type: :
|
35
|
+
type: :runtime
|
36
|
+
- !ruby/object:Gem::Dependency
|
39
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
38
|
none: false
|
41
39
|
requirements:
|
@@ -49,9 +47,9 @@ dependencies:
|
|
49
47
|
version: 2.9.0
|
50
48
|
version_requirements: *id002
|
51
49
|
name: rspec
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
50
|
prerelease: false
|
54
51
|
type: :development
|
52
|
+
- !ruby/object:Gem::Dependency
|
55
53
|
requirement: &id003 !ruby/object:Gem::Requirement
|
56
54
|
none: false
|
57
55
|
requirements:
|
@@ -65,9 +63,9 @@ dependencies:
|
|
65
63
|
version: 1.0.0
|
66
64
|
version_requirements: *id003
|
67
65
|
name: bundler
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
66
|
prerelease: false
|
70
67
|
type: :development
|
68
|
+
- !ruby/object:Gem::Dependency
|
71
69
|
requirement: &id004 !ruby/object:Gem::Requirement
|
72
70
|
none: false
|
73
71
|
requirements:
|
@@ -81,6 +79,8 @@ dependencies:
|
|
81
79
|
version: 1.6.4
|
82
80
|
version_requirements: *id004
|
83
81
|
name: jeweler
|
82
|
+
prerelease: false
|
83
|
+
type: :development
|
84
84
|
description: |-
|
85
85
|
Manage Jar files for Ruby. In the spirit of Bundler, a Jarfile
|
86
86
|
is used to generate a Jarfile.lock that contains all the resolved jar dependencies for scopes runtime, compile, and test.
|
@@ -147,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
147
147
|
requirements: []
|
148
148
|
|
149
149
|
rubyforge_project:
|
150
|
-
rubygems_version: 1.8.
|
150
|
+
rubygems_version: 1.8.24
|
151
151
|
signing_key:
|
152
152
|
specification_version: 3
|
153
153
|
summary: Manage Jar files for Ruby
|