Class: MiniAether::Resolver

Inherits:
Object
  • Object
show all
Includes:
Helper
Defined in:
lib/mini_aether/resolver.rb

Constant Summary collapse

RepositorySystem =
Java::OrgSonatypeAether::RepositorySystem
MavenRepositorySystemSession =
Java::OrgApacheMavenRepositoryInternal::MavenRepositorySystemSession
LocalRepository =
Java::OrgSonatypeAetherRepository::LocalRepository
DefaultServiceLocator =
Java::OrgApacheMavenRepositoryInternal::DefaultServiceLocator
RepositoryConnectorFactory =
Java::OrgSonatypeAetherSpiConnector::RepositoryConnectorFactory
AsyncRepositoryConnectorFactory =
Java::OrgSonatypeAetherConnectorAsync::AsyncRepositoryConnectorFactory
FileRepositoryConnectorFactory =
Java::OrgSonatypeAetherConnectorFile::FileRepositoryConnectorFactory
Artifact =
Java::OrgSonatypeAetherUtilArtifact::DefaultArtifact
Dependency =
Java::OrgSonatypeAetherGraph::Dependency
RemoteRepository =
Java::OrgSonatypeAetherRepository::RemoteRepository
CollectRequest =
Java::OrgSonatypeAetherCollection::CollectRequest
DependencyRequest =
Java::OrgSonatypeAetherResolution::DependencyRequest
PreorderNodeListGenerator =
Java::OrgSonatypeAetherUtilGraph::PreorderNodeListGenerator
LOCATOR =

set up connectors for service locator

DefaultServiceLocator.new
MiB_PER_BYTE =
1024.0*1024.0

Constants included from Helper

Helper::System

Instance Method Summary collapse

Methods included from Helper

#interpolate, #jar_path, #local_repository_path

Constructor Details

#initializeResolver

Returns a new instance of Resolver.



65
66
67
68
69
70
71
72
# File 'lib/mini_aether/resolver.rb', line 65

def initialize
  @logger = Java::OrgSlf4j::LoggerFactory.getLogger(self.class.to_s)
  @system = LOCATOR.getService(RepositorySystem.java_class)
  @session = MavenRepositorySystemSession.new
  local_repo = LocalRepository.new(local_repository_path)
  local_manager = @system.newLocalRepositoryManager(local_repo)
  @session.setLocalRepositoryManager(local_manager)
end

Instance Method Details

#new_artifact(hash) ⇒ Object



74
75
76
77
78
79
# File 'lib/mini_aether/resolver.rb', line 74

def new_artifact(hash)
  Artifact.new(hash[:group_id],
               hash[:artifact_id],
               hash[:extension] || 'jar',
               hash[:version])
end

#resolve(dep_hashes, repos) ⇒ Java::JavaUtil::List<Java::JavaIo::File>

Resolve a set of dependencies dep_hashes from repositories repos.

Parameters:

  • dep_hashes (Array<Hash>)
  • repos (Array<String>)

    urls to maven2 repositories

  • dep_hash (Hash)

    a customizable set of options

Returns:

  • (Java::JavaUtil::List<Java::JavaIo::File>)


102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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
# File 'lib/mini_aether/resolver.rb', line 102

def resolve(dep_hashes, repos)
  @logger.info 'resolving dependencies'
  collect_req = CollectRequest.new

  dep_hashes.each do |hash|
    dep = Dependency.new new_artifact(hash), 'compile'
    collect_req.addDependency dep
    @logger.debug 'requested {}', dep
  end

  repos.each do |uri|
    repo = RemoteRepository.new(uri.object_id.to_s, 'default', uri)
    collect_req.addRepository repo
    @logger.info 'added repository {}', repo.getUrl
    enabled = []
    enabled << 'releases' if repo.getPolicy(false).isEnabled
    enabled << 'snapshots' if repo.getPolicy(true).isEnabled
    @logger.debug '{}', enabled.join('+')
  end

  node = @system.collectDependencies(@session, collect_req).getRoot
    
  dependency_req = DependencyRequest.new(node, nil)
  @system.resolveDependencies(@session, dependency_req)
  
  nlg = PreorderNodeListGenerator.new
  node.accept nlg

  if @logger.isDebugEnabled
    total_size = 0
    nlg.getArtifacts(false).each do |artifact|
      file = artifact.file
      size = File.stat(artifact.file.absolute_path).size
      total_size += size
      
      @logger.debug("Using %0.2f %s" % [size/MiB_PER_BYTE, artifact])
    end
    @logger.debug('      -----')
    @logger.debug("      %0.2f MiB total" % [total_size/MiB_PER_BYTE])
  else
    nlg.getArtifacts(false).each do |artifact|
      @logger.info 'Using {}', artifact
    end
  end

  nlg.getFiles
end

#resolve_foreign(deps_data, repos_data) ⇒ Object

Load dumps of the dep_hashes and repos args using Marshal.load and then call #resolve. Useful for when the dependencies and repositories are constructed under a different Java classloader.



85
86
87
# File 'lib/mini_aether/resolver.rb', line 85

def resolve_foreign(deps_data, repos_data)
  resolve(Marshal.load(deps_data), Marshal.load(repos_data))
end