jbundler 0.0.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,337 @@
1
+ require 'uri'
2
+ require 'tempfile'
3
+ require 'fileutils'
4
+ require 'rubygems'
5
+ require 'rubygems/builder'
6
+ require 'rubygems/installer'
7
+ require 'set'
8
+
9
+ # A modified maven_gemify
10
+ module Gem
11
+
12
+ class Maven3NotFound < StandardError; end
13
+
14
+ #This is some of the worst stuff. I had to this because bundler will search
15
+ #the index of specifications based on the name given in the GemFile which
16
+ #includes the "mvn:<groupid>:<artifactid>" syntax. The rest of the ruby gem world
17
+ #doesn't work on this name so I have to constantly convert to the maven name when
18
+ #necessary for certain methods
19
+ class MavenSpec < Gem::Specification
20
+ alias_method :old_full_name, :full_name
21
+ alias_method :old_full_gem_path, :full_gem_path
22
+
23
+ alias_method :old_ruby, :to_ruby
24
+
25
+ def to_ruby
26
+ old_name=self.name
27
+ self.name=Maven::Gemify2.mname(old_name)
28
+ return_results = old_ruby
29
+ self.name=old_name
30
+ return_results
31
+ end
32
+
33
+ def full_name
34
+ if @full_name.nil?
35
+ #Needs to use the maven_name here not the gemname which has the "mvn:" stuff
36
+ old_name=self.name
37
+ self.name=Maven::Gemify2.mname(old_name)
38
+ return_path = old_full_name
39
+ self.name=old_name
40
+ @full_name=return_path
41
+ end
42
+ @full_name
43
+ end
44
+
45
+ def full_gem_path
46
+ if @full_gem_path.nil?
47
+ #Needs to use the maven_name here not the gemname which has the "mvn:" stuff
48
+ old_name=self.name
49
+ self.name=Maven::Gemify2.mname(old_name)
50
+ return_path = old_full_gem_path
51
+ self.name=old_name
52
+ @full_gem_path=return_path
53
+ end
54
+ @full_gem_path
55
+ end
56
+
57
+ end
58
+
59
+ module Maven
60
+
61
+ class Gemify2
62
+ attr_reader :repositories
63
+
64
+ #repositories should be an array of urls
65
+ def initialize(*repositories)
66
+ maven # ensure maven initialized
67
+ @repositories = Set.new
68
+ if repositories.length > 0
69
+ @repositories.merge([repositories].flatten)
70
+ end
71
+
72
+ end
73
+
74
+ def add_repository(repository_url)
75
+ @repositories << repository_url
76
+ end
77
+
78
+ @@verbose = false
79
+ def self.verbose?
80
+ @@verbose || $DEBUG
81
+ end
82
+ def verbose?
83
+ self.class.verbose?
84
+ end
85
+ def self.verbose=(v)
86
+ @@verbose = v
87
+ end
88
+
89
+ private
90
+ def self.maven_config
91
+ @maven_config ||= Gem.configuration["maven"] || {}
92
+ end
93
+ def maven_config; self.class.maven_config; end
94
+
95
+ def self.java_imports
96
+ %w(
97
+ org.codehaus.plexus.classworlds.ClassWorld
98
+ org.codehaus.plexus.DefaultContainerConfiguration
99
+ org.codehaus.plexus.DefaultPlexusContainer
100
+ org.apache.maven.Maven
101
+ org.apache.maven.repository.RepositorySystem
102
+ org.apache.maven.execution.DefaultMavenExecutionRequest
103
+ org.apache.maven.artifact.repository.MavenArtifactRepository
104
+ org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout
105
+ org.apache.maven.artifact.repository.ArtifactRepositoryPolicy
106
+ javax.xml.stream.XMLStreamWriter
107
+ javax.xml.stream.XMLOutputFactory
108
+ javax.xml.stream.XMLStreamException
109
+ ).each {|i| java_import i }
110
+ end
111
+
112
+ def self.create_maven
113
+ require 'java' # done lazily, so we're not loading it all the time
114
+ bin = nil
115
+ if ENV['M2_HOME'] # use M2_HOME if set
116
+ bin = File.join(ENV['M2_HOME'], "bin")
117
+ else
118
+ ENV['PATH'].split(File::PATH_SEPARATOR).detect do |path|
119
+ mvn = File.join(path, "mvn")
120
+ if File.exists?(mvn)
121
+ if File.symlink?(mvn)
122
+ link = File.readlink(mvn)
123
+ if link =~ /^\// # is absolute path
124
+ bin = File.dirname(File.expand_path(link))
125
+ else # is relative path so join with dir of the maven command
126
+ bin = File.dirname(File.expand_path(File.join(File.dirname(mvn), link)))
127
+ end
128
+ else # is no link so just expand it
129
+ bin = File.expand_path(path)
130
+ end
131
+ else
132
+ nil
133
+ end
134
+ end
135
+ end
136
+ bin = "/usr/share/maven2/bin" if bin.nil? # OK let's try debian default
137
+ if File.exists?(bin)
138
+ @mvn = File.join(bin, "mvn")
139
+ if Dir.glob(File.join(bin, "..", "lib", "maven-core-3.*jar")).size == 0
140
+ begin
141
+ gem 'ruby-maven', ">=0"
142
+ bin = File.dirname(Gem.bin_path('ruby-maven', "rmvn"))
143
+ @mvn = File.join(bin, "rmvn")
144
+ rescue LoadError
145
+ bin = nil
146
+ end
147
+ end
148
+ else
149
+ bin = nil
150
+ end
151
+ raise Gem::Maven3NotFound.new("can not find maven3 installation. install ruby-maven with\n\n\tjruby -S gem install ruby-maven\n\n") if bin.nil?
152
+
153
+ warn "Using Maven install at #{bin}" if verbose?
154
+
155
+ boot = File.join(bin, "..", "boot")
156
+ lib = File.join(bin, "..", "lib")
157
+ ext = File.join(bin, "..", "ext")
158
+ (Dir.glob(lib + "/*jar") + Dir.glob(boot + "/*jar")).each {|path| require path }
159
+
160
+ java.lang.System.setProperty("classworlds.conf", File.join(bin, "m2.conf"))
161
+ java.lang.System.setProperty("maven.home", File.join(bin, ".."))
162
+ java_imports
163
+
164
+ class_world = ClassWorld.new("plexus.core", java.lang.Thread.currentThread().getContextClassLoader());
165
+ config = DefaultContainerConfiguration.new
166
+ config.set_class_world class_world
167
+ config.set_name "ruby-tools"
168
+ container = DefaultPlexusContainer.new(config);
169
+ @@execution_request_populator = container.lookup(org.apache.maven.execution.MavenExecutionRequestPopulator.java_class)
170
+
171
+ @@settings_builder = container.lookup(org.apache.maven.settings.building.SettingsBuilder.java_class )
172
+ container.lookup(Maven.java_class)
173
+ end
174
+
175
+ def self.maven
176
+ @maven ||= create_maven
177
+ end
178
+ def maven; self.class.maven; end
179
+
180
+ def self.temp_dir
181
+ @temp_dir ||=
182
+ begin
183
+ d=Dir.mktmpdir
184
+ at_exit {FileUtils.rm_rf(d.dup)}
185
+ d
186
+ end
187
+ end
188
+
189
+ def temp_dir
190
+ self.class.temp_dir
191
+ end
192
+
193
+ def execute(goals, pomFile,props = {})
194
+ request = DefaultMavenExecutionRequest.new
195
+ request.set_show_errors(true)
196
+
197
+ props.each do |k,v|
198
+ request.user_properties.put(k.to_s, v.to_s)
199
+ end
200
+ request.set_goals(goals)
201
+ request.set_logging_level 0
202
+ request.setPom(java.io.File.new(pomFile))
203
+ if verbose?
204
+ active_profiles = request.getActiveProfiles.collect{ |p| p.to_s }
205
+ puts "active profiles:\n\t[#{active_profiles.join(', ')}]"
206
+ puts "maven goals:"
207
+ request.goals.each { |g| puts "\t#{g}" }
208
+ puts "system properties:"
209
+ request.getUserProperties.map.each { |k,v| puts "\t#{k} => #{v}" }
210
+ puts
211
+ end
212
+ out = java.lang.System.out
213
+ string_io = java.io.ByteArrayOutputStream.new
214
+ java.lang.System.setOut(java.io.PrintStream.new(string_io))
215
+ result = maven.execute request
216
+ java.lang.System.out = out
217
+ has_exceptions = false
218
+ result.exceptions.each do |e|
219
+ has_exceptions = true
220
+ e.print_stack_trace
221
+ string_io.write(e.get_message.to_java_string.get_bytes)
222
+ end
223
+ raise string_io.to_s if has_exceptions
224
+ string_io.to_s
225
+ end
226
+
227
+ def writeElement(xmlWriter,element_name, text)
228
+ xmlWriter.writeStartElement(element_name.to_java)
229
+ xmlWriter.writeCharacters(text.to_java)
230
+ xmlWriter.writeEndElement
231
+ end
232
+
233
+ public
234
+ def maven_name(gemname)
235
+ self.class.mname(gemname)
236
+ end
237
+ #gemname==mvn:group_id:artifact_id
238
+ def self.mname(gemname)
239
+ gemname.gsub("mvn:","").gsub("-","_").gsub(".","_").gsub(":","_")
240
+ end
241
+
242
+ def get_versions(gemname)
243
+ []
244
+ end
245
+
246
+ def generate_spec(gemname, version)
247
+ mname = maven_name(gemname)
248
+ MavenSpec.new do |s|
249
+ s.name = gemname
250
+ s.date = '2010-04-28'
251
+ s.summary = "Hola!"
252
+ s.description = "A simple hello world gem"
253
+ s.authors = ["Nick Quaranto"]
254
+ s.email = 'nick@quaran.to'
255
+ s.homepage = 'http://rubygems.org/gems/hola'
256
+ s.version = version
257
+ s.files = "lib/#{mname}.rb"
258
+ end
259
+ end
260
+
261
+ def generate_gem(gemname, version)
262
+ mname = maven_name(gemname)
263
+ spec_file=generate_spec(gemname,version)
264
+ # spec_file.name=mname #So that the gem's name is correct
265
+ gemname=gemname.gsub("mvn:","")
266
+ maven_parts = gemname.split(":")
267
+ group_id = maven_parts[0]
268
+ artifact_id = maven_parts[1]
269
+
270
+ FileUtils.mkdir_p(File.join(temp_dir,"lib"))
271
+ #Generate a dummy POM file that we'll use to run maven against
272
+ #to resolve deps and generate a classpath
273
+ pomfile=File.join(temp_dir,"pom.xml")
274
+ puts "pomfile=#{pomfile}"
275
+ out = java.io.BufferedOutputStream.new(java.io.FileOutputStream.new(pomfile.to_java))
276
+ outputFactory = XMLOutputFactory.newFactory()
277
+ xmlStreamWriter = outputFactory.createXMLStreamWriter(out)
278
+ xmlStreamWriter.writeStartDocument
279
+ xmlStreamWriter.writeStartElement("project".to_java)
280
+
281
+ writeElement(xmlStreamWriter,"groupId","org.hokiesuns.mavengemify")
282
+ writeElement(xmlStreamWriter,"artifactId","mavengemify")
283
+ writeElement(xmlStreamWriter,"modelVersion","4.0.0")
284
+ writeElement(xmlStreamWriter,"version","1.0-SNAPSHOT")
285
+
286
+ #Repositories
287
+ if @repositories.length > 0
288
+ xmlStreamWriter.writeStartElement("repositories".to_java)
289
+ @repositories.each_with_index {|repo,i|
290
+ xmlStreamWriter.writeStartElement("repository".to_java)
291
+ writeElement(xmlStreamWriter,"id","repository_#{i}")
292
+ writeElement(xmlStreamWriter,"url",repo)
293
+ xmlStreamWriter.writeEndElement #repository
294
+ }
295
+ xmlStreamWriter.writeEndElement #repositories
296
+ end
297
+ xmlStreamWriter.writeStartElement("dependencies".to_java)
298
+
299
+ xmlStreamWriter.writeStartElement("dependency".to_java)
300
+ writeElement(xmlStreamWriter,"groupId",group_id)
301
+ writeElement(xmlStreamWriter,"artifactId",artifact_id)
302
+ writeElement(xmlStreamWriter,"version",version.to_s)
303
+
304
+ xmlStreamWriter.writeEndElement #dependency
305
+
306
+ xmlStreamWriter.writeEndElement #dependencies
307
+
308
+ xmlStreamWriter.writeEndElement #project
309
+
310
+ xmlStreamWriter.writeEndDocument
311
+ xmlStreamWriter.close
312
+ out.close
313
+
314
+ execute(["dependency:resolve","dependency:build-classpath"],pomfile,{"mdep.outputFile" => "cp.txt","mdep.fileSeparator"=>"/"})
315
+
316
+ ruby_file = File.new(File.join(temp_dir,"lib/#{mname}.rb"),"w")
317
+ cp_file = File.new(File.join(temp_dir,"cp.txt"),"r")
318
+ cp_line = cp_file.gets
319
+ cp_file.close
320
+ cp_entries = cp_line.split(";")
321
+ cp_entries.each{ |entry|
322
+ ruby_file.puts "require \"#{entry}\""
323
+ }
324
+ ruby_file.close
325
+ old_pwd = Dir.pwd
326
+ Dir.chdir(temp_dir)
327
+ gembuilder = Gem::Builder.new(spec_file)
328
+ gemfile=gembuilder.build
329
+
330
+ geminstaller = Gem::Installer.new(gemfile)
331
+ geminstaller.install
332
+ Dir.chdir(old_pwd)
333
+ end
334
+
335
+ end
336
+ end
337
+ end
@@ -1,18 +1,8 @@
1
1
  module JBundler
2
- module MavenUtil
2
+ module MavenVersion
3
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
4
  def to_version(*args)
15
- if args.size == 0 || (args.size == 1 && args[0].nil?)
5
+ if args.size == 0
16
6
  "[0,)"
17
7
  else
18
8
  low, high = convert(args[0])
@@ -40,14 +30,14 @@ module JBundler
40
30
  [(nil || low), "#{val}]"]
41
31
  # treat '!' the same way as '>' since maven can not describe such range
42
32
  elsif arg =~ /[!>]/
43
- val = arg.sub(/[!>]\s*/, '')
33
+ val = arg.sub(/>\s*/, '')
44
34
  ["(#{val}", (nil || high)]
45
35
  elsif arg =~ /</
46
36
  val = arg.sub(/<\s*/, '')
47
37
  [(nil || low), "#{val})"]
48
38
  elsif arg =~ /\=/
49
39
  val = arg.sub(/=\s*/, '')
50
- ["[" + val, val + '.0.0.0.0.1)']
40
+ [val, val]
51
41
  else
52
42
  [arg, arg]
53
43
  end
@@ -0,0 +1,4 @@
1
+ module JBundler
2
+ module MavenVersion
3
+ end
4
+ end
@@ -0,0 +1,9 @@
1
+ require 'jbundler/maven_version'
2
+ module JBundler
3
+
4
+ class Mavenfile
5
+ include MavenVersion
6
+
7
+ end
8
+
9
+ end
@@ -1,13 +1,13 @@
1
1
  require 'fileutils'
2
2
  require 'tempfile'
3
- require 'jbundler/maven_util'
3
+ require 'maven/tools/coordinate'
4
4
  require 'java'
5
5
 
6
6
  module JBundler
7
7
 
8
8
  class Pom
9
9
 
10
- include MavenUtil
10
+ include Maven::Tools::Coordinate
11
11
 
12
12
  private
13
13
 
@@ -0,0 +1,251 @@
1
+ require 'uri'
2
+ require 'tempfile'
3
+ require 'fileutils'
4
+ require 'set'
5
+ require 'jbundler/gemfile_lock'
6
+ require 'java'
7
+
8
+ # A modified maven_gemify2 taken from https://github.com/ANithian/bundler/blob/a29d4550dfb2f24372bf6e60f00e633ff92d5d64/lib/bundler/maven_gemify2.rb
9
+ module JBundler
10
+
11
+ class Maven3NotFound < StandardError; end
12
+
13
+ class Maven
14
+ attr_reader :repositories
15
+
16
+ #repositories should be an array of urls
17
+ def initialize(*repositories)
18
+ maven # ensure maven initialized
19
+ @repositories = Set.new
20
+ if repositories.length > 0
21
+ @repositories.merge([repositories].flatten)
22
+ end
23
+
24
+ end
25
+
26
+ def add_repository(repository_url)
27
+ @repositories << repository_url
28
+ end
29
+
30
+ @@verbose = false
31
+ def self.verbose?
32
+ @@verbose || $DEBUG
33
+ end
34
+ def verbose?
35
+ self.class.verbose?
36
+ end
37
+ def self.verbose=(v)
38
+ @@verbose = v
39
+ end
40
+
41
+ private
42
+ def self.maven_config
43
+ @maven_config ||= Gem.configuration["maven"] || {}
44
+ end
45
+ def maven_config; self.class.maven_config; end
46
+
47
+ def self.java_imports
48
+ %w(
49
+ org.codehaus.plexus.classworlds.ClassWorld
50
+ org.codehaus.plexus.DefaultContainerConfiguration
51
+ org.codehaus.plexus.DefaultPlexusContainer
52
+ org.apache.maven.Maven
53
+ org.apache.maven.repository.RepositorySystem
54
+ org.apache.maven.execution.DefaultMavenExecutionRequest
55
+ org.apache.maven.artifact.repository.MavenArtifactRepository
56
+ org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout
57
+ org.apache.maven.artifact.repository.ArtifactRepositoryPolicy
58
+ javax.xml.stream.XMLStreamWriter
59
+ javax.xml.stream.XMLOutputFactory
60
+ javax.xml.stream.XMLStreamException
61
+ ).each {|i| java_import i }
62
+ end
63
+
64
+ def self.create_maven
65
+ require 'java' # done lazily, so we're not loading it all the time
66
+ bin = nil
67
+ if ENV['M2_HOME'] # use M2_HOME if set
68
+ bin = File.join(ENV['M2_HOME'], "bin")
69
+ else
70
+ ENV['PATH'].split(File::PATH_SEPARATOR).detect do |path|
71
+ mvn = File.join(path, "mvn")
72
+ if File.exists?(mvn)
73
+ if File.symlink?(mvn)
74
+ link = File.readlink(mvn)
75
+ if link =~ /^\// # is absolute path
76
+ bin = File.dirname(File.expand_path(link))
77
+ else # is relative path so join with dir of the maven command
78
+ bin = File.dirname(File.expand_path(File.join(File.dirname(mvn), link)))
79
+ end
80
+ else # is no link so just expand it
81
+ bin = File.expand_path(path)
82
+ end
83
+ else
84
+ nil
85
+ end
86
+ end
87
+ end
88
+ bin = "/usr/share/maven2/bin" if bin.nil? # OK let's try debian default
89
+ if File.exists?(bin)
90
+ @mvn = File.join(bin, "mvn")
91
+ if Dir.glob(File.join(bin, "..", "lib", "maven-core-3.*jar")).size == 0
92
+ begin
93
+ gem 'ruby-maven', ">=0"
94
+ bin = File.dirname(Gem.bin_path('ruby-maven', "rmvn"))
95
+ @mvn = File.join(bin, "rmvn")
96
+ rescue LoadError
97
+ bin = nil
98
+ end
99
+ end
100
+ else
101
+ bin = nil
102
+ end
103
+ raise Maven3NotFound.new("can not find maven3 installation. install ruby-maven with\n\n\tjruby -S gem install ruby-maven\n\n") if bin.nil?
104
+
105
+ warn "Using Maven install at #{bin}" if verbose?
106
+
107
+ boot = File.join(bin, "..", "boot")
108
+ lib = File.join(bin, "..", "lib")
109
+ ext = File.join(bin, "..", "ext")
110
+ (Dir.glob(lib + "/*jar") + Dir.glob(boot + "/*jar")).each {|path| require path }
111
+
112
+ java.lang.System.setProperty("classworlds.conf", File.join(bin, "m2.conf"))
113
+ java.lang.System.setProperty("maven.home", File.join(bin, ".."))
114
+ java_imports
115
+
116
+ class_world = ClassWorld.new("plexus.core", java.lang.Thread.currentThread().getContextClassLoader());
117
+ config = DefaultContainerConfiguration.new
118
+ config.set_class_world class_world
119
+ config.set_name "ruby-tools"
120
+ container = DefaultPlexusContainer.new(config);
121
+ @@execution_request_populator = container.lookup(org.apache.maven.execution.MavenExecutionRequestPopulator.java_class)
122
+
123
+ @@settings_builder = container.lookup(org.apache.maven.settings.building.SettingsBuilder.java_class )
124
+ container.lookup(Maven.java_class)
125
+ end
126
+
127
+ def self.maven
128
+ @maven ||= create_maven
129
+ end
130
+ def maven; self.class.maven; end
131
+
132
+ def self.temp_dir
133
+ @temp_dir ||=
134
+ begin
135
+ d=Dir.mktmpdir
136
+ at_exit {FileUtils.rm_rf(d.dup)}
137
+ d
138
+ end
139
+ end
140
+
141
+ def temp_dir
142
+ self.class.temp_dir
143
+ end
144
+
145
+ def execute(goals, pomFile, props = {})
146
+ request = DefaultMavenExecutionRequest.new
147
+ request.set_show_errors(true)
148
+
149
+ props.each do |k,v|
150
+ request.user_properties.put(k.to_s, v.to_s)
151
+ end
152
+ request.set_goals(goals)
153
+ request.set_logging_level 0
154
+ request.setPom(java.io.File.new(pomFile))
155
+ if verbose?
156
+ active_profiles = request.getActiveProfiles.collect{ |p| p.to_s }
157
+ puts "active profiles:\n\t[#{active_profiles.join(', ')}]"
158
+ puts "maven goals:"
159
+ request.goals.each { |g| puts "\t#{g}" }
160
+ puts "system properties:"
161
+ request.getUserProperties.map.each { |k,v| puts "\t#{k} => #{v}" }
162
+ puts
163
+ end
164
+ out = java.lang.System.out
165
+ string_io = java.io.ByteArrayOutputStream.new
166
+ java.lang.System.setOut(java.io.PrintStream.new(string_io))
167
+ result = maven.execute request
168
+ java.lang.System.out = out
169
+ has_exceptions = false
170
+ result.exceptions.each do |e|
171
+ has_exceptions = true
172
+ e.print_stack_trace
173
+ string_io.write(e.get_message.to_java_string.get_bytes)
174
+ end
175
+ raise string_io.to_s if has_exceptions
176
+ string_io.to_s
177
+ end
178
+
179
+ def writeElement(xmlWriter,element_name, text)
180
+ xmlWriter.writeStartElement(element_name.to_java)
181
+ xmlWriter.writeCharacters(text.to_java)
182
+ xmlWriter.writeEndElement
183
+ end
184
+
185
+ public
186
+
187
+ def generate_classpath(mavenfile = 'Mvnfile', classpathfile = '.jbundler/classpath.rb')
188
+
189
+ #to resolve deps and generate a classpath
190
+ pomfile=File.join(temp_dir,"pom.xml")
191
+ puts "pomfile=#{pomfile}"
192
+ out = java.io.BufferedOutputStream.new(java.io.FileOutputStream.new(pomfile.to_java))
193
+ outputFactory = XMLOutputFactory.newFactory()
194
+ xmlStreamWriter = outputFactory.createXMLStreamWriter(out)
195
+ xmlStreamWriter.writeStartDocument
196
+ xmlStreamWriter.writeStartElement("project".to_java)
197
+
198
+ writeElement(xmlStreamWriter,"groupId","org.hokiesuns.mavengemify")
199
+ writeElement(xmlStreamWriter,"artifactId","mavengemify")
200
+ writeElement(xmlStreamWriter,"modelVersion","4.0.0")
201
+ writeElement(xmlStreamWriter,"version","1.0-SNAPSHOT")
202
+
203
+ #Repositories
204
+ if @repositories.length > 0
205
+ xmlStreamWriter.writeStartElement("repositories".to_java)
206
+ @repositories.each_with_index {|repo,i|
207
+ xmlStreamWriter.writeStartElement("repository".to_java)
208
+ writeElement(xmlStreamWriter,"id","repository_#{i}")
209
+ writeElement(xmlStreamWriter,"url",repo)
210
+ xmlStreamWriter.writeEndElement #repository
211
+ }
212
+ xmlStreamWriter.writeEndElement #repositories
213
+ end
214
+ xmlStreamWriter.writeStartElement("dependencies".to_java)
215
+
216
+ (File.read(mavenfile).split(/\n/) + GemfileLock.new.jar_deps).each do |line|
217
+ if line =~ /^\s*jar\s+/
218
+ group_id, artifact_id, version = line.sub(/\s*jar\s+/, '').sub(/#.*/,'').gsub(/[',]/,'').split(/[\s:]+/)
219
+
220
+ xmlStreamWriter.writeStartElement("dependency".to_java)
221
+ writeElement(xmlStreamWriter,"groupId",group_id)
222
+ writeElement(xmlStreamWriter,"artifactId",artifact_id)
223
+ # default to complete version range
224
+ writeElement(xmlStreamWriter,"version", (version || "[0,)").to_s)
225
+ xmlStreamWriter.writeEndElement #dependency
226
+ end
227
+ end
228
+ xmlStreamWriter.writeEndElement #dependencies
229
+
230
+ xmlStreamWriter.writeEndElement #project
231
+
232
+ xmlStreamWriter.writeEndDocument
233
+ xmlStreamWriter.close
234
+ out.close
235
+
236
+ execute(["dependency:resolve","dependency:build-classpath"],pomfile,{"mdep.outputFile" => "cp.txt","mdep.fileSeparator"=>"/"})
237
+
238
+ FileUtils.mkdir_p(File.dirname(classpathfile))
239
+ File.open(classpathfile, 'w') do |f|
240
+ path_separator = java.lang.System.getProperty("path.separator").to_s
241
+ File.read(File.join(temp_dir,"cp.txt")).each do |line|
242
+ line.split(/#{path_separator}/).each do |path|
243
+ f.puts "require '#{path}'"
244
+ end
245
+ end
246
+ f.close
247
+ end
248
+ end
249
+
250
+ end
251
+ end