Module: Mxrb::Runtime::JavaLocator

Defined in:
lib/mxrb/runtime/java_locator.rb

Overview

Resolves a version-compatible local JDK without invoking a version manager shim.

Class Method Summary collapse

Class Method Details

.installed(major) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/mxrb/runtime/java_locator.rb', line 17

def installed(major)
  %w[.asdf/installs/java .local/share/mise/installs/java].flat_map do |root|
    Dir.glob(File.join(Dir.home, root, '*')).select do |path|
      File.basename(path).match?(/(?:\A|[-_])#{Regexp.escape(major.to_s)}(?:[._-]|\z)/)
    end
  end.sort.reverse
end

.resolve(major, configured: nil) ⇒ Object



9
10
11
12
13
14
15
# File 'lib/mxrb/runtime/java_locator.rb', line 9

def resolve(major, configured: nil)
  candidates = [configured, ENV['MXRB_JAVA_HOME'], ENV['JAVA_HOME']]
               .compact.reject { _1.to_s.empty? }
  candidates.concat(installed(major))
  candidates.map { File.expand_path(_1) }
            .find { File.executable?(File.join(_1, 'bin', 'java')) }
end