Module: Jars::Mima
- Defined in:
- lib/jars/mima.rb,
lib/jars/mima/version.rb
Overview
Resolver backed by the Mima Java library (MIni MAven). Replaces the previous ruby-maven based resolution pipeline.
Mima wraps the Maven Resolver (Aether) API as a standalone library (no Maven process is spawned).
Defined Under Namespace
Classes: ResolvedDependency
Constant Summary collapse
- MIMA_VERSION =
'2.4.42'- SLF4J_VERSION =
'2.0.17'- MAVEN_CENTRAL =
'https://repo.maven.apache.org/maven2'- MIMA_DIR =
'lib/jars/mima'- JARS =
jars.each_slice(2).to_h do |gav, sha1| group, artifact, version = gav.split(':') group = group.tr('.', '/') jar_file = "#{artifact}-#{version}.jar" [ jar_file, { url: "#{MAVEN_CENTRAL}/#{group}/#{artifact}/#{version}/#{jar_file}", sha1: sha1 } ] end
- @@jars_loaded =
rubocop:disable Style/ClassVars
nil
Class Method Summary collapse
-
.context_overrides ⇒ Java::eu.maveniverse.maven.mima.context.ContextOverrides
Builds a
ContextOverridesfrom jar-dependencies configuration (local repo, user/global settings.xml). -
.create_context(overrides = nil) ⇒ Java::eu.maveniverse.maven.mima.context.Context
Creates a Mima Context.
-
.ensure_jars_loaded ⇒ Object
Loads the bundled Mima jars onto the classpath.
-
.resolve_artifacts(artifacts, all_dependencies: false) ⇒ Array<ResolvedDependency>
Resolves transitive dependencies for the given artifacts.
-
.resolve_with_context(context, artifacts, all_dependencies: false) ⇒ Array<ResolvedDependency>
Resolves transitive dependencies using an existing Mima context.
Class Method Details
.context_overrides ⇒ Java::eu.maveniverse.maven.mima.context.ContextOverrides
Builds a ContextOverrides from jar-dependencies configuration (local repo, user/global settings.xml).
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/jars/mima.rb', line 35 def context_overrides ensure_jars_loaded builder = Java::eu.maveniverse.maven.mima.context.ContextOverrides.create builder.withUserSettings(true) # Local repository override local_repo = ::Jars.local_maven_repo builder.withLocalRepositoryOverride(java.nio.file.Paths.get(local_repo)) if local_repo # User settings.xml override settings = ::Jars::MavenSettings.settings builder.withUserSettingsXmlOverride(java.nio.file.Paths.get(settings)) if settings # Global settings.xml override global = ::Jars::MavenSettings.global_settings builder.withGlobalSettingsXmlOverride(java.nio.file.Paths.get(global)) if global builder.build end |
.create_context(overrides = nil) ⇒ Java::eu.maveniverse.maven.mima.context.Context
Creates a Mima Context. Caller is responsible for closing it.
61 62 63 64 65 66 67 |
# File 'lib/jars/mima.rb', line 61 def create_context(overrides = nil) ensure_jars_loaded overrides ||= context_overrides runtime = Java::eu.maveniverse.maven.mima.context.Runtimes::INSTANCE.getRuntime runtime.create(overrides) end |
.ensure_jars_loaded ⇒ Object
Loads the bundled Mima jars onto the classpath. Safe to call multiple times; only loads once.
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/jars/mima.rb', line 17 def ensure_jars_loaded return if @@jars_loaded mima_dir = File.('mima', File.dirname(__FILE__)) load File.join(mima_dir, "slf4j-api-#{SLF4J_VERSION}.jar") load File.join(mima_dir, "slf4j-simple-#{SLF4J_VERSION}.jar") load File.join(mima_dir, "jcl-over-slf4j-#{SLF4J_VERSION}.jar") load File.join(mima_dir, "context-#{MIMA_VERSION}.jar") load File.join(mima_dir, "standalone-static-uber-#{MIMA_VERSION}.jar") @@jars_loaded = true # rubocop:disable Style/ClassVars end |
.resolve_artifacts(artifacts, all_dependencies: false) ⇒ Array<ResolvedDependency>
Resolves transitive dependencies for the given artifacts. Creates (and closes) its own Mima context.
75 76 77 78 79 80 81 82 |
# File 'lib/jars/mima.rb', line 75 def resolve_artifacts(artifacts, all_dependencies: false) context = create_context begin resolve_with_context(context, artifacts, all_dependencies: all_dependencies) ensure context.close end end |
.resolve_with_context(context, artifacts, all_dependencies: false) ⇒ Array<ResolvedDependency>
Resolves transitive dependencies using an existing Mima context.
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/jars/mima.rb', line 90 def resolve_with_context(context, artifacts, all_dependencies: false) deps = artifacts_to_dependencies(artifacts, all_dependencies: all_dependencies) return [] if deps.empty? collect_request = org.eclipse.aether.collection.CollectRequest.new deps.each { |d| collect_request.addDependency(d) } collect_request.setRepositories(context.remoteRepositories) dependency_request = org.eclipse.aether.resolution.DependencyRequest.new dependency_request.setCollectRequest(collect_request) result = context.repositorySystem.resolveDependencies( context.repositorySystemSession, dependency_request ) root = result.getRoot collect_resolved(root) end |