Class: Naether::Bootstrap

Inherits:
Object
  • Object
show all
Defined in:
lib/naether/bootstrap.rb

Overview

:title:Naether::Bootstrap

Helper for bootstrapping Naether

Authors

Michael Guymon

Constant Summary

@@dependencies =
nil

Class Method Summary (collapse)

Class Method Details

+ (Object) bootstrap_local_repo(local_repo = nil, opts = {})



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/naether/bootstrap.rb', line 56

def bootstrap_local_repo(local_repo = nil, opts = {} )
  local_repo = local_repo || default_local_repo
  
  opts[:local_repo] = local_repo
  
  temp_naether_dir = File.join( local_repo, ".naether" )
  
  
  deps = download_dependencies( temp_naether_dir, opts )
  
  jars = (deps[:exists] + deps[:downloaded]).map {|jar| jar.values.first }
    
  jars = Naether::Java.internal_load_paths( jars )
  
  if ( deps[:downloaded].size > 0)
    install_dependencies_to_local_repo( deps[:downloaded], jars, opts )
  end
  
  #raise Naether::Java.instance.java.class_loader.getLoadedPaths().map { |x| x.toString() }.sort.inspect
  
end

+ (Object) check_local_repo_for_deps(local_repo = nil, opts = {})



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/naether/bootstrap.rb', line 124

def check_local_repo_for_deps(local_repo = nil, opts = {} )
  
  local_repo = local_repo || default_local_repo
  local_repo = File.expand_path(local_repo)
  
  #puts "Checking #{local_repo} for jars to bootstrap Naether"
  
  deps = {:exists => [], :missing => [], :downloaded => [] }
  
  dependencies( opts[:dep_yaml] ).each do |dep|
    notation = dep.split(":")
    group = notation[0].gsub("\.", File::SEPARATOR)
    artifact = notation[1].gsub("\.", File::SEPARATOR)
    type = notation[2]
    version = notation[3]
    
    jar = "#{artifact}-#{version}.#{type}"
    
    maven_path = "#{local_repo}#{File::SEPARATOR}#{group}#{File::SEPARATOR}#{artifact}#{File::SEPARATOR}#{version}#{File::SEPARATOR}#{jar}"
    
    if File.exists? maven_path
      deps[:exists] << { dep => maven_path }
    else
      deps[:missing] << dep
    end
    
  end  
  deps
end

+ (Object) default_local_repo



21
22
23
# File 'lib/naether/bootstrap.rb', line 21

def default_local_repo
  ENV['M2_REPO'] || File.expand_path('~/.m2/repository')
end

+ (Object) dependencies(dep_file = nil)

List of Java dependencies for Naether



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/naether/bootstrap.rb', line 41

def dependencies( dep_file=nil )
  
  if @@dependencies
    return @@dependencies
  end
  
  if dep_file.nil?
    dep_file = Naether::Configuration.dependencies_yml
  end
  
  dep = YAML.load_file( dep_file )  
  @@dependencies = dep[:dependencies]
end

+ (Object) download_dependencies(dest, opts = {})



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/naether/bootstrap.rb', line 78

def download_dependencies( dest, opts = {} )
   
  if !File.exists? dest
    FileUtils.mkdir_p( dest )
  end
  
  deps = {}
    
  if opts[:deps]
    deps[:missing] = opts[:deps] 
  else
    deps = check_local_repo_for_deps( opts[:local_repo], opts )
  end
  
  deps[:downloaded] = []
    
  if deps[:missing].size > 0
      
    deps[:missing].each do |dep|
      notation = dep.split(":")
      group = notation[0].gsub("\.", File::SEPARATOR)
      artifact = notation[1]
      type = notation[2]
      version = notation[3]
      
      jar = "#{artifact}-#{version}.#{type}"
      
      maven_path = "#{dest}#{File::SEPARATOR}#{jar}"
      
      if !File.exists? maven_path
        maven_mirror = "http://repo1.maven.org/maven2/#{group}/#{artifact}/#{version}/#{jar}"
        
        open(maven_path, 'wb') do |io|
          io.print open(maven_mirror).read
        end
        
        deps[:downloaded] << { dep => maven_path }
      else
        deps[:downloaded] << { dep => maven_path }
      end
    end
  end
  
  deps
end

+ (Object) install_dependencies_to_local_repo(install_jars, naether_jars, opts = {})



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/naether/bootstrap.rb', line 154

def install_dependencies_to_local_repo( install_jars, naether_jars, opts = {}  )
    
  require "#{File.dirname(__FILE__)}/../naether"
  
  @naether = Naether.create_from_jars( naether_jars )
  
  if opts[:local_repo]
    @naether.local_repo_path = opts[:local_repo]
  end
  
  install_jars.each do |dep|
    notation, path = dep.to_a.first
    @naether.install( notation, nil, path )
  end
  
  @naether
end

+ (Object) write_dependencies(dest = 'jar_dependencies.yml')

write bootstrap dependencies to yaml file



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/naether/bootstrap.rb', line 26

def write_dependencies( dest = 'jar_dependencies.yml' )
  deps = {};
  if Naether::Configuration.platform == 'java'
    deps[:dependencies] = com.tobedevoured.naether.Bootstrap.dependencies.to_a
  else
    bootstrap = Rjb::import('com.tobedevoured.naether.Bootstrap')
    deps[:dependencies] = bootstrap.dependencies.toArray().map{ |dep| dep.toString() }
  end  
  
  File.open( dest, 'w' ) do |out|
    YAML.dump( deps, out )
  end
end