maven-tools 0.29.0

Sign up to get free protection for your applications and to get access to all the features.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Kristian Meier
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1 @@
1
+ # maven tools [![Build Status](https://secure.travis-ci.org/torquebox/maven-tools.png)](http://travis-ci.org/torquebox/maven-tools) #
@@ -0,0 +1 @@
1
+ require 'maven_tools'
@@ -0,0 +1 @@
1
+ require 'maven_tools/jarfile'
@@ -0,0 +1,77 @@
1
+ require 'jbundler/maven_util'
2
+ module JBundler
3
+
4
+ class Mavenfile
5
+ include MavenUtil
6
+
7
+ def initialize(file = 'Mvnfile')
8
+ @file = file
9
+ @lockfile = file + ".lock"
10
+ end
11
+
12
+ def mtime
13
+ File.mtime(@file)
14
+ end
15
+
16
+ def exists?
17
+ File.exists?(@file)
18
+ end
19
+
20
+ def mtime_lock
21
+ File.mtime(@lockfile)
22
+ end
23
+
24
+ def exists_lock?
25
+ File.exists?(@lockfile)
26
+ end
27
+
28
+ def load_lockfile
29
+ _locked = []
30
+ if exists_lock?
31
+ File.read(@lockfile).each_line do |line|
32
+ line.strip!
33
+ if line.size > 0 && !(line =~ /^\s*#/)
34
+ _locked << line
35
+ end
36
+ end
37
+ end
38
+ _locked
39
+ end
40
+
41
+ def locked
42
+ @locked ||= load_lockfile
43
+ end
44
+
45
+ def locked?(coordinate)
46
+ coord = coordinate.sub(/^([^:]+:[^:]+):.+/) { $1 }
47
+ locked.detect { |l| l.sub(/^([^:]+:[^:]+):.+/) { $1 } == coord } != nil
48
+ end
49
+
50
+ def populate_unlocked(aether)
51
+ File.read(@file).each_line do |line|
52
+ if coord = to_coordinate(line)
53
+ unless locked?(coord)
54
+ aether.add_artifact(coord)
55
+ end
56
+ elsif line =~ /^\s*(repository|source)\s/
57
+ name, url = line.sub(/.*(repository|source)\s+/, '').gsub(/['":]/,'').split(/,/)
58
+ url = name unless url
59
+ aether.add_repository(name, url)
60
+ end
61
+ end
62
+ end
63
+
64
+ def populate_locked(aether)
65
+ locked.each { |l| aether.add_artifact(l) }
66
+ end
67
+
68
+ def generate_lockfile(dependency_coordinates)
69
+ File.open(@lockfile, 'w') do |f|
70
+ dependency_coordinates.each do |d|
71
+ f.puts d.to_s
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ end
@@ -0,0 +1,56 @@
1
+ module JBundler
2
+ module MavenUtil
3
+
4
+ def to_coordinate(line)
5
+ if line =~ /^\s*(jar|pom)\s/
6
+
7
+ group_id, artifact_id, version, second_version = line.sub(/\s*[a-z]+\s+/, '').sub(/#.*/,'').gsub(/\s+/,'').gsub(/['"],/, ':').gsub(/['"]/, '').split(/:/)
8
+ mversion = second_version ? to_version(version, second_version) : to_version(version)
9
+ extension = line.strip.sub(/\s+.*/, '')
10
+ "#{group_id}:#{artifact_id}:#{extension}:#{mversion}"
11
+ end
12
+ end
13
+
14
+ def to_version(*args)
15
+ if args.size == 0 || (args.size == 1 && args[0].nil?)
16
+ "[0,)"
17
+ else
18
+ low, high = convert(args[0])
19
+ low, high = convert(args[1], low, high) if args[1] =~ /[=~><]/
20
+ if low == high
21
+ low
22
+ else
23
+ "#{low || '[0'},#{high || ')'}"
24
+ end
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def convert(arg, low = nil, high = nil)
31
+ if arg =~ /~>/
32
+ val = arg.sub(/~>\s*/, '')
33
+ last = val.sub(/\.[^.]+$/, '.99999')
34
+ ["[#{val}", "#{last}]"]
35
+ elsif arg =~ />=/
36
+ val = arg.sub(/>=\s*/, '')
37
+ ["[#{val}", (nil || high)]
38
+ elsif arg =~ /<=/
39
+ val = arg.sub(/<=\s*/, '')
40
+ [(nil || low), "#{val}]"]
41
+ # treat '!' the same way as '>' since maven can not describe such range
42
+ elsif arg =~ /[!>]/
43
+ val = arg.sub(/[!>]\s*/, '')
44
+ ["(#{val}", (nil || high)]
45
+ elsif arg =~ /</
46
+ val = arg.sub(/<\s*/, '')
47
+ [(nil || low), "#{val})"]
48
+ elsif arg =~ /\=/
49
+ val = arg.sub(/=\s*/, '')
50
+ ["[" + val, val + '.0.0.0.0.1)']
51
+ else
52
+ [arg, arg]
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,230 @@
1
+ # TODO make nice require after ruby-maven uses the same ruby files
2
+ require File.join(File.dirname(__FILE__), 'utils.rb')
3
+ require File.join(File.dirname(File.dirname(__FILE__)), 'tools', 'coordinate.rb')
4
+ #require 'maven/tools/coordinate'
5
+
6
+ module Maven
7
+ module Model
8
+
9
+ class DependencyArray < Array
10
+ def <<(dep)
11
+ raise "not of type Dependency" unless dep.is_a?(Dependency)
12
+ d = detect { |item| item == dep }
13
+ if d
14
+ d.version = dep.version
15
+ self
16
+ else
17
+ super
18
+ end
19
+ end
20
+ alias :push :<<
21
+ end
22
+
23
+ class ExclusionArray < Array
24
+ def <<(*dep)
25
+ excl = dep[0].is_a?(Exclusion) ? dep[0]: Exclusion.new(*dep.flatten)
26
+ delete_if { |item| item == excl }
27
+ super excl
28
+ end
29
+ alias :push :<<
30
+ end
31
+
32
+ class Coordinate < Tag
33
+
34
+ private
35
+
36
+ include ::Maven::Tools::Coordinate
37
+
38
+ public
39
+
40
+ tags :group_id, :artifact_id, :version
41
+ def initialize(*args)
42
+ @group_id, @artifact_id, @version = gav(*args.flatten)
43
+ end
44
+
45
+ def version?
46
+ !(@version.nil? || @version == '[0,)')
47
+ end
48
+
49
+ def hash
50
+ "#{group_id}:#{artifact_id}".hash
51
+ end
52
+
53
+ def ==(other)
54
+ group_id == other.group_id && artifact_id == other.artifact_id
55
+ end
56
+ alias :eql? :==
57
+
58
+ end
59
+
60
+ class Parent < Coordinate
61
+ tags :relative_path
62
+
63
+ end
64
+
65
+ class Exclusion < Tag
66
+ tags :group_id, :artifact_id
67
+ def initialize(*args)
68
+ @group_id, @artifact_id = group_artifact(*args)
69
+ end
70
+
71
+ def hash
72
+ "#{group_id}:#{artifact_id}".hash
73
+ end
74
+
75
+ def ==(other)
76
+ group_id == other.group_id && artifact_id == other.artifact_id
77
+ end
78
+ alias :eql? :==
79
+
80
+ private
81
+
82
+ include ::Maven::Tools::Coordinate
83
+ end
84
+
85
+ class Dependency < Coordinate
86
+ tags :type, :scope, :classifier, :exclusions
87
+ def initialize(type, *args)
88
+ super(*args)
89
+ @type = type
90
+ args.flatten!
91
+ if args[0] =~ /:/ && args.size == 3
92
+ @classifier = args[2] unless args[2] =~ /[=~><]/
93
+ elsif args.size == 4
94
+ @classifier = args[3] unless args[3] =~ /[=~><]/
95
+ end
96
+ end
97
+
98
+ def hash
99
+ "#{group_id}:#{artifact_id}:#{@type}:#{@classifier}".hash
100
+ end
101
+
102
+ def ==(other)
103
+ super && @type == other.instance_variable_get(:@type) && @classifier == other.instance_variable_get(:@classifier)
104
+ end
105
+ alias :eql? :==
106
+
107
+ def self.new_gem(gemname, *args)
108
+ new(:gem, "rubygems", gemname, *args)
109
+ end
110
+
111
+ def self.new_pom(*args)
112
+ new(:pom, *args)
113
+ end
114
+
115
+ def self.new_jar(*args)
116
+ new(:jar, *args)
117
+ end
118
+
119
+ def self.new_test_jar(*args)
120
+ result = new(:jar, *args)
121
+ result.scope :test
122
+ result
123
+ end
124
+
125
+ def exclusions(&block)
126
+ @exclusions ||= ExclusionArray.new
127
+ if block
128
+ block.call(@exclusions)
129
+ end
130
+ @exclusions
131
+ end
132
+
133
+ def exclude(*args)
134
+ exclusions << args
135
+ end
136
+ end
137
+
138
+ module Dependencies
139
+
140
+ def self.included(parent)
141
+ parent.tags :dependencies
142
+ end
143
+
144
+ def jar?(*args)
145
+ dependencies.member?(Dependency.new(:jar, *args))
146
+ end
147
+
148
+ def test_jar?(*args)
149
+ dependencies.member?(Dependency.new_test_jar(*args))
150
+ end
151
+
152
+ def gem?(*args)
153
+ dependencies.member?(Dependency.new(:gem, ['rubygems', *args].flatten))
154
+ end
155
+
156
+ def detect_gem(name)
157
+ dependencies.detect { |d| d.type.to_sym == :gem && d.artifact_id == name }
158
+ end
159
+
160
+ def pom?(*args)
161
+ dependencies.member?(Dependency.new_pom(*args))
162
+ end
163
+
164
+ def dependencies(&block)
165
+ @dependencies ||= DependencyArray.new
166
+ if block
167
+ block.call(self)
168
+ end
169
+ @dependencies
170
+ end
171
+
172
+ def add_dependency(dep, has_version = true, &block)
173
+ d = dependencies.detect { |d| d == dep }
174
+ if d
175
+ if has_version
176
+ d.version = dep.version
177
+ end
178
+ dep = d
179
+ else
180
+ dependencies << dep
181
+ end
182
+ block.call(dep) if block
183
+ dep
184
+ end
185
+ private :add_dependency
186
+
187
+ def add_gem(*args, &block)
188
+ args = args.flatten
189
+ if args.size == 1
190
+ dep = Dependency.new_gem(*args)
191
+ dep = dependencies.detect { |d| d == dep }
192
+ if dep
193
+ return dep
194
+ end
195
+ args[1] = ">= 0"
196
+ end
197
+ add_dependency(Dependency.new_gem(*args), &block)
198
+ end
199
+ private :add_gem
200
+
201
+ def jar(*args, &block)
202
+ if args.last.is_a?(Hash)
203
+ raise "hash not allowed for jar"
204
+ end
205
+ add_dependency(Dependency.new_jar(args), args.size > 1, &block)
206
+ end
207
+
208
+ def test_jar(*args, &block)
209
+ if args.last.is_a?(Hash)
210
+ raise "hash not allowed for test_jar"
211
+ end
212
+ add_dependency(Dependency.new_test_jar(args), args.size > 1, &block)
213
+ end
214
+
215
+ def gem(*args, &block)
216
+ if args.last.is_a?(Hash)
217
+ raise "hash not allowed in that context"
218
+ end
219
+ add_gem(args, &block)
220
+ end
221
+
222
+ def pom(*args, &block)
223
+ if args.last.is_a?(Hash)
224
+ raise "hash not allowed in that context"
225
+ end
226
+ add_dependency(Dependency.new_pom(args), args.size > 1, &block)
227
+ end
228
+ end
229
+ end
230
+ end
@@ -0,0 +1,247 @@
1
+ require File.join(File.dirname(__FILE__), "..", "tools", 'model.rb')
2
+
3
+ module Maven
4
+ module Model
5
+
6
+ class DependencyArray < Array
7
+ def <<(dep)
8
+ d = detect { |item| item == dep }
9
+ if d
10
+ d.version = arg.version
11
+ self
12
+ else
13
+ super
14
+ end
15
+ end
16
+ alias :push :<<
17
+ end
18
+
19
+ class ExclusionArray < Array
20
+ def <<(dep)
21
+ excl = dep.is_a?(Exclusion) ? dep: Exclusion.new(dep)
22
+ d = detect { |item| item == excl }
23
+ if d
24
+ delete d
25
+ end
26
+ super excl
27
+ end
28
+ alias :push :<<
29
+ end
30
+
31
+ class Coordinate < Maven::Tools::Tag
32
+ tags :group_id, :artifact_id, :version
33
+ def initialize(*args)
34
+ @group_id, @artifact_id, @version = *coordinate(*args.flatten)
35
+ end
36
+
37
+ def coordinate(*args)
38
+ if args[0] =~ /:/
39
+ [args[0].sub(/:[^:]+$/, ''), args[0].sub(/.*:/, ''), version(*args[1, 2])]
40
+ else
41
+ [args[0], args[1], version(*args[2,3])]
42
+ end
43
+ end
44
+
45
+ def version(*args)
46
+ if args.size == 0
47
+ nil
48
+ else
49
+ low, high = convert(args[0])
50
+ low, high = convert(args[1], low, high) if args[1]
51
+ if low == high
52
+ low
53
+ else
54
+ "#{low || '[0.0.0'},#{high || ')'}"
55
+ end
56
+ end
57
+ end
58
+
59
+ def convert(arg, low = nil, high = nil)
60
+ if arg =~ /~>/
61
+ val = arg.sub(/~>\s*/, '')
62
+ last = val.sub(/\.[^.]+$/, '.99999')
63
+ ["[#{val}", "#{last}]"]
64
+ elsif arg =~ />=/
65
+ val = arg.sub(/>=\s*/, '')
66
+ ["[#{val}", (nil || high)]
67
+ elsif arg =~ /<=/
68
+ val = arg.sub(/<=\s*/, '')
69
+ [(nil || low), "#{val}]"]
70
+ elsif arg =~ />/
71
+ val = arg.sub(/>\s*/, '')
72
+ ["(#{val}", (nil || high)]
73
+ elsif arg =~ /</
74
+ val = arg.sub(/<\s*/, '')
75
+ [(nil || low), "#{val})"]
76
+ else
77
+ [arg, arg]
78
+ end
79
+ end
80
+
81
+ def hash
82
+ "#{group_id}:#{artifact_id}".hash
83
+ end
84
+
85
+ def ==(other)
86
+ group_id == other.group_id && artifact_id == other.artifact_id
87
+ end
88
+ alias :eql? :==
89
+ end
90
+
91
+ class Exclusion < Maven::Tools::Tag
92
+ tags :group_id, :artifact_id
93
+ def initialize(*args)
94
+ @group_id, @artifact_id = *coordinate(*args)
95
+ end
96
+
97
+ def coordinate(*args)
98
+ case args.size
99
+ when 1
100
+ name = args[0].sub(/^mvn:/, '')
101
+ if name =~ /:/
102
+ [name.sub(/:[^:]+$/, ''), name.sub(/.*:/, '')]
103
+ else
104
+ ["rubygems", name]
105
+ end
106
+ else
107
+ [args[0], args[1]]
108
+ end
109
+ end
110
+
111
+ def hash
112
+ "#{group_id}:#{artifact_id}".hash
113
+ end
114
+
115
+ def ==(other)
116
+ group_id == other.group_id && artifact_id == other.artifact_id
117
+ end
118
+ alias :eql? :==
119
+ end
120
+
121
+ class Dependency < Coordinate
122
+ tags :type, :scope, :classifier, :exclusions
123
+ def initialize(type, *args)
124
+ super(*args)
125
+ @type = type
126
+ end
127
+
128
+ def hash
129
+ "#{group_id}:#{artifact_id}:#{@type}".hash
130
+ end
131
+
132
+ def ==(other)
133
+ super && @type == other.instance_variable_get(:@type)
134
+ end
135
+ alias :eql? :==
136
+
137
+ def self.new_gem(gemname, *args)
138
+ if gemname =~ /^mvn:/
139
+ new(:maven_gem, gemname.sub(/^mvn:/, ''), *args)
140
+ else
141
+ new(:gem, "rubygems", gemname, *args)
142
+ end
143
+ end
144
+
145
+ def self.new_jar(*args)
146
+ new(:jar, *args)
147
+ end
148
+
149
+ def self.new_test_jar(*args)
150
+ new(:test_jar, *args)
151
+ end
152
+
153
+ def exclusions(&block)
154
+ @exclusions ||= ExclusionArray.new
155
+ if block
156
+ block.call(@exclusions)
157
+ end
158
+ @exclusions
159
+ end
160
+
161
+ end
162
+
163
+ module Dependencies
164
+
165
+ def jar?(*args)
166
+ dependencies.member?(Dependency.new(:jar, *args))
167
+ end
168
+
169
+ def test_jar?(*args)
170
+ dependencies.member?(Dependency.new(:test_jar, *args))
171
+ end
172
+
173
+ def gem?(*args)
174
+ dependencies.member?(Dependency.new(:gem, *args))
175
+ end
176
+
177
+ def maven_gem?(*args)
178
+ dependencies.member?(Dependency.new(:maven_gem, *args))
179
+ end
180
+
181
+ def dependencies(&block)
182
+ @dependencies ||= DependencyArray.new
183
+ if block
184
+ block.call(@dependencies)
185
+ end
186
+ @dependencies
187
+ end
188
+
189
+ def lock_file
190
+ nil
191
+ end
192
+
193
+ def add_dependency(dep, &block)
194
+ dependencies << dep
195
+ block.call(dep) if block
196
+ dep
197
+ end
198
+ private :add_dependency
199
+
200
+ def add_gem(*args, &block)
201
+ if lock_file.nil? #|| !lock_file.hull.member?(args[0])
202
+ args[1] = ">= 0.0.0" unless args[1]
203
+ add_dependency(:gem, args, block)
204
+ else
205
+ result = add_dependency(:gem, args[0], block)
206
+
207
+ # add its dependencies as well to have the version
208
+ # determine by the dependencyManagement
209
+ lock_file.dependency_hull(args[0]).map.each do |d|
210
+ add_dependency(:gem, d[0], block)
211
+ end
212
+
213
+ result
214
+ end
215
+ end
216
+ private :add_gem
217
+
218
+ def jar(*args, &block)
219
+ if args.last.is_a?(Hash)
220
+ raise "hash not allowed for jar"
221
+ end
222
+ add_dependency(:jar, args, block)
223
+ end
224
+
225
+ def test_jar(*args, &block)
226
+ if args.last.is_a?(Hash)
227
+ raise "hash not allowed for test_jar"
228
+ end
229
+ add_dependency(:test_jar, args, block)
230
+ end
231
+
232
+ def gem(*args, &block)
233
+ if args.last.is_a?(Hash)
234
+ raise "hash not allowed in that context"
235
+ end
236
+ add_gem(args, block)
237
+ end
238
+
239
+ def maven_gem(*args, &block)
240
+ if args.last.is_a?(Hash)
241
+ raise "hash not allowed in that context"
242
+ end
243
+ add_dependency(:maven_gem, args, block)
244
+ end
245
+ end
246
+ end
247
+ end