require 'jar_dependencies'
require 'rubygems/request'
require 'rubygems/uri_formatter'
module Jars
class MavenSettings
LINE_SEPARATOR = java.lang.System.line_separator
class << self
def local_settings
unless instance_variable_defined?(:@_jars_maven_local_settings_)
@_jars_maven_local_settings_ = nil
end
if @_jars_maven_local_settings_.nil?
if settings = Jars.absolute( 'settings.xml' )
if File.exists?(settings)
@_jars_maven_local_settings_ = settings
end
end
end
@_jars_maven_local_settings_ || nil
end
def user_settings
unless instance_variable_defined?(:@_jars_maven_user_settings_)
@_jars_maven_user_settings_ = nil
end
if @_jars_maven_user_settings_.nil?
if settings = Jars.absolute( Jars.to_prop( MAVEN_SETTINGS ) )
unless File.exists?(settings)
Jars.warn { "configured ENV['#{MAVEN_SETTINGS}'] = '#{settings}' not found" }
settings = false
end
else # use maven default (user) settings
settings = File.join( Jars.user_home, '.m2', 'settings.xml' )
settings = false unless File.exists?(settings)
end
@_jars_maven_user_settings_ = settings
end
@_jars_maven_user_settings_ || nil
end
def effective_settings
unless instance_variable_defined?(:@_jars_effective_maven_settings_)
@_jars_effective_maven_settings_ = nil
end
if @_jars_effective_maven_settings_.nil?
begin
http = Gem::Request.proxy_uri(Gem.configuration[:http_proxy] || Gem::Request.get_proxy_from_env('http'))
https = Gem::Request.proxy_uri(Gem.configuration[:https_proxy] || Gem::Request.get_proxy_from_env('https'))
rescue NoMethodError
Jars.debug('ignore rubygems proxy configuration as rubygems is too old')
end
if http.nil? && https.nil?
@_jars_effective_maven_settings_ = settings
else
@_jars_effective_maven_settings_ =
setup_interpolated_settings(http, https) || settings
end
end
@_jars_effective_maven_settings_
end
def cleanup
if effective_settings != settings
File.unlink(effective_settings)
end
ensure
reset
end
def reset
instance_variables.each { |var| instance_variable_set(var, nil) }
end
def settings
unless instance_variable_defined?(:@_jars_maven_settings_)
@_jars_maven_settings_ = nil
end
if @_jars_maven_settings_.nil?
local_settings || user_settings
end
end
def global_settings
unless instance_variable_defined?(:@_jars_maven_global_settings_)
@_jars_maven_global_settings_ = nil
end
if @_jars_maven_global_settings_.nil?
if mvn_home = ENV[ 'M2_HOME' ] || ENV[ 'MAVEN_HOME' ]
settings = File.join( mvn_home, 'conf/settings.xml' )
settings = false unless File.exists?(settings)
else
settings = false
end
@_jars_maven_global_settings_ = settings
end
@_jars_maven_global_settings_ || nil
end
private
def setup_interpolated_settings(http, https)
proxy = raw_proxy_settings_xml(http, https).gsub("\n", LINE_SEPARATOR)
if settings.nil?
raw = "#{LINE_SEPARATOR}#{proxy}"
else
raw = File.read(settings)
if raw.includes?('')
Jars.info("can not interpolated proxy info for #{settings}")
return
else
raw.sub!("", "#{LINE_SEPARATOR}#{proxy}")
end
end
tempfile = java.io.File.create_temp_file('settings', '.xml')
tempfile.delete_on_exit
File.write(tempfile.path, raw)
tempfile.path
end
def raw_proxy_settings_xml(http, https)
raw = File.read(File.join(File.dirname(__FILE__), 'settings.xml'))
if http
raw.sub!('__HTTP_ACTIVE__', 'true')
raw.sub!('__HTTP_SERVER__', http.host)
raw.sub!('__HTTP_PORT__', http.port.to_s)
else
raw.sub!('__HTTP_ACTIVE__', 'false')
end
if https
raw.sub!('__HTTPS_ACTIVE__', 'true')
raw.sub!('__HTTPS_SERVER__', https.host)
raw.sub!('__HTTPS_PORT__', https.port.to_s)
else
raw.sub!('__HTTPS_ACTIVE__', 'false')
end
raw
end
end
end
end