Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Maven
- module Tools
- class Gemify
- BASE_GOAL = "de.saumya.mojo:gemify-maven-plugin:0.22.0"
- require 'java'
- bin = nil
- if ENV['M2_HOME'] # use M2_HOME if set
- bin = File.join(ENV['M2_HOME'], "bin")
- else
- ENV['PATH'].split(java.lang.System.getProperty("path.separator")).detect do |path|
- mvn = File.join(path, "mvn")
- if File.exists?(mvn)
- if File.symlink?(mvn)
- link = File.readlink(mvn)
- if link =~ /^\// # is absolute path
- bin = File.dirname(File.expand_path(link))
- else # is relative path so join with dir of the maven command
- bin = File.dirname(File.expand_path(File.join(File.dirname(mvn), link)))
- end
- else # is no link so just expand it
- bin = File.expand_path(path)
- end
- else
- nil
- end
- end
- end
- bin = "/usr/share/maven2/bin" if bin.nil? # OK let's try debian default
- if File.exists?(bin) &&
- Dir.glob(File.join(bin, "..", "lib", "maven-core-3.*jar")).size == 0
- begin
- gem 'ruby-maven', ">=0"
- bin = File.dirname(Gem.bin_path('ruby-maven', "rmvn"))
- rescue LoadError
- bin = nil
- end
- end
- raise "can not find maven3 installation. install ruby-maven with\n\n\tjruby -S gem install ruby-maven --pre\n\n" if bin.nil?
- warn "using #{bin}"
- boot = File.join(bin, "..", "boot")
- lib = File.join(bin, "..", "lib")
- ext = File.join(bin, "..", "ext")
- classpath = (Dir.glob(lib + "/*jar") + Dir.glob(boot + "/*jar"))
- java.lang.System.setProperty("classworlds.conf", File.join(bin, "m2.conf"))
- java.lang.System.setProperty("maven.home", File.join(bin, ".."))
- classpath.each do |path|
- require path
- end
- private
- def self.create_maven
- puts "create maven instance"
- import "org.codehaus.plexus.classworlds"
- classWorld = ClassWorld.new("plexus.core", java.lang.Thread.currentThread().getContextClassLoader());
- config = org.codehaus.plexus.DefaultContainerConfiguration.new
- config.setClassWorld(classWorld)
- config.setName("ruby-tools")
- container = org.codehaus.plexus.DefaultPlexusContainer.new(config);
- container.lookup(org.apache.maven.Maven.java_class)
- end
- def self.maven
- @maven ||= create_maven
- end
- def self.temp_dir
- @temp_dir ||=
- begin
- f = java.io.File.createTempFile("gemify", "")
- f.delete
- f.mkdir
- f.deleteOnExit
- f.absolute_path
- end
- end
- def self.execute(goal, gemname, version, props = {})
- r = org.apache.maven.execution.DefaultMavenExecutionRequest.new
- r.setShowErrors( true )
- r.getUserProperties.put("gemify.skipDependencies", "true")
- r.getUserProperties.put("gemify.tempDir", temp_dir)
- r.getUserProperties.put("gemify.gemname", gemname)
- r.getUserProperties.put("gemify.version", version.to_s) if version
- props.each do |k,v|
- r.getUserProperties.put(k.to_s, v.to_s)
- end
- r.setGoals( [goal] )
- r.setLoggingLevel(0)
- #p r.goals.to_s
- #p r.getUserProperties.map
- out = java.lang.System.out
- string_io = java.io.ByteArrayOutputStream.new
- java.lang.System.setOut(java.io.PrintStream.new(string_io))
- result = maven.execute( r );
- java.lang.System.setOut(out)
- result.getExceptions.each { |e| e.printStackTrace }
- string_io.to_s
- end
- public
- def self.get_versions(gemname)
- # p "versions"
- # p gemname
- result = execute("#{BASE_GOAL}:versions", gemname, nil)
- result.gsub(/\n/, '').sub(/.*\[/, "").sub(/\]/, '').gsub(/ /, '').split(',')
- end
- def self.generate_spec(gemname, version)
- # puts "generate spec"
- # p gemname
- # p version
- result = execute("#{BASE_GOAL}:gemify", gemname, version, {"gemify.onlySpecs" => true })
- path = result.gsub(/\n/, '')
- if path =~ /gemspec: /
- path = path.sub(/.*gemspec: /, '')
- if path.size > 0
- result = File.expand_path(path)
- java.io.File.new(result).deleteOnExit
- result
- end
- end
- end
- def self.generate_gem(gemname, version)
- # p "generate gem"
- # p gemname
- # p version.to_s
- result = execute("#{BASE_GOAL}:gemify", gemname, version)
- path = result.gsub(/\n/, '')
- if path =~ /gem: /
- path = path.sub(/.*gem: /, '')
- if path.size > 0
- result = File.expand_path(path)
- java.io.File.new(result).deleteOnExit
- result
- end
- end
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment