mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Fix Language::Java::java_home_env for Linux
/usr/libexec/java_home is specific to macOS. Language::Java::java_home_cmd is not implemented on Linux and raises NotImplementedError. Add private Language::Java::java_home_shell and use it instead of java_home_cmd. Add public Language::Java::java_home for use by formulae.
This commit is contained in:
parent
30c90dcc3b
commit
e8b22690a0
1
Library/Homebrew/extend/os/language/java.rb
Normal file
1
Library/Homebrew/extend/os/language/java.rb
Normal file
@ -0,0 +1 @@
|
|||||||
|
require "extend/os/mac/language/java" if OS.mac?
|
18
Library/Homebrew/extend/os/mac/language/java.rb
Normal file
18
Library/Homebrew/extend/os/mac/language/java.rb
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module Language
|
||||||
|
module Java
|
||||||
|
def self.java_home_cmd(version = nil)
|
||||||
|
version_flag = " --version #{version}" if version
|
||||||
|
"/usr/libexec/java_home#{version_flag}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.java_home(version = nil)
|
||||||
|
cmd = Language::Java.java_home_cmd(version)
|
||||||
|
Pathname.new Utils.popen_read(cmd).chomp
|
||||||
|
end
|
||||||
|
|
||||||
|
# @private
|
||||||
|
def self.java_home_shell(version = nil)
|
||||||
|
"$(#{java_home_cmd(version)})"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -356,7 +356,7 @@ class Pathname
|
|||||||
def write_jar_script(target_jar, script_name, java_opts = "", java_version: nil)
|
def write_jar_script(target_jar, script_name, java_opts = "", java_version: nil)
|
||||||
mkpath
|
mkpath
|
||||||
java_home = if java_version
|
java_home = if java_version
|
||||||
"JAVA_HOME=\"$(#{Language::Java.java_home_cmd(java_version)})\" "
|
"JAVA_HOME=\"#{Language::Java.java_home_shell(java_version)}\" "
|
||||||
end
|
end
|
||||||
join(script_name).write <<~SH
|
join(script_name).write <<~SH
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
@ -1,16 +1,29 @@
|
|||||||
module Language
|
module Language
|
||||||
module Java
|
module Java
|
||||||
def self.java_home_cmd(version = nil)
|
def self.java_home_cmd(_ = nil)
|
||||||
version_flag = " --version #{version}" if version
|
# macOS provides /usr/libexec/java_home, but Linux does not.
|
||||||
"/usr/libexec/java_home#{version_flag}"
|
raise NotImplementedError
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.java_home(version = nil)
|
||||||
|
req = JavaRequirement.new [*version]
|
||||||
|
raise UnsatisfiedRequirements, req.message unless req.satisfied?
|
||||||
|
req.java_home
|
||||||
|
end
|
||||||
|
|
||||||
|
# @private
|
||||||
|
def self.java_home_shell(version = nil)
|
||||||
|
java_home(version).to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.java_home_env(version = nil)
|
def self.java_home_env(version = nil)
|
||||||
{ JAVA_HOME: "$(#{java_home_cmd(version)})" }
|
{ JAVA_HOME: java_home_shell(version) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.overridable_java_home_env(version = nil)
|
def self.overridable_java_home_env(version = nil)
|
||||||
{ JAVA_HOME: "${JAVA_HOME:-$(#{java_home_cmd(version)})}" }
|
{ JAVA_HOME: "${JAVA_HOME:-#{java_home_shell(version)}}" }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
require "extend/os/language/java"
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
require "language/java"
|
require "language/java"
|
||||||
|
|
||||||
class JavaRequirement < Requirement
|
class JavaRequirement < Requirement
|
||||||
|
attr_reader :java_home
|
||||||
|
|
||||||
fatal true
|
fatal true
|
||||||
download "https://www.oracle.com/technetwork/java/javase/downloads/index.html"
|
download "https://www.oracle.com/technetwork/java/javase/downloads/index.html"
|
||||||
|
|
||||||
|
@ -1,25 +1,37 @@
|
|||||||
require "language/java"
|
require "language/java"
|
||||||
|
|
||||||
describe Language::Java do
|
describe Language::Java do
|
||||||
|
describe "::java_home" do
|
||||||
|
it "returns valid JAVA_HOME if version is specified", :needs_java do
|
||||||
|
java_home = described_class.java_home("1.8+")
|
||||||
|
expect(java_home/"bin/java").to be_an_executable
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns valid JAVA_HOME if version is not specified", :needs_java do
|
||||||
|
java_home = described_class.java_home
|
||||||
|
expect(java_home/"bin/java").to be_an_executable
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "::java_home_env" do
|
describe "::java_home_env" do
|
||||||
it "returns java_home path with version if version specified" do
|
it "returns java_home path with version if version specified", :needs_macos do
|
||||||
java_home = described_class.java_home_env("blah")
|
java_home = described_class.java_home_env("blah")
|
||||||
expect(java_home[:JAVA_HOME]).to include("--version blah")
|
expect(java_home[:JAVA_HOME]).to include("--version blah")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns java_home path without version if version is not specified" do
|
it "returns java_home path without version if version is not specified", :needs_java do
|
||||||
java_home = described_class.java_home_env
|
java_home = described_class.java_home_env
|
||||||
expect(java_home[:JAVA_HOME]).not_to include("--version")
|
expect(java_home[:JAVA_HOME]).not_to include("--version")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "::overridable_java_home_env" do
|
describe "::overridable_java_home_env" do
|
||||||
it "returns java_home path with version if version specified" do
|
it "returns java_home path with version if version specified", :needs_macos do
|
||||||
java_home = described_class.overridable_java_home_env("blah")
|
java_home = described_class.overridable_java_home_env("blah")
|
||||||
expect(java_home[:JAVA_HOME]).to include("--version blah")
|
expect(java_home[:JAVA_HOME]).to include("--version blah")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns java_home path without version if version is not specified" do
|
it "returns java_home path without version if version is not specified", :needs_java do
|
||||||
java_home = described_class.overridable_java_home_env
|
java_home = described_class.overridable_java_home_env
|
||||||
expect(java_home[:JAVA_HOME]).not_to include("--version")
|
expect(java_home[:JAVA_HOME]).not_to include("--version")
|
||||||
end
|
end
|
||||||
|
@ -85,6 +85,16 @@ RSpec.configure do |config|
|
|||||||
skip "Not on macOS." unless OS.mac?
|
skip "Not on macOS." unless OS.mac?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
config.before(:each, :needs_java) do
|
||||||
|
java_installed = if OS.mac?
|
||||||
|
Utils.popen_read("/usr/libexec/java_home", "--failfast")
|
||||||
|
$CHILD_STATUS.success?
|
||||||
|
else
|
||||||
|
which("java")
|
||||||
|
end
|
||||||
|
skip "Java not installed." unless java_installed
|
||||||
|
end
|
||||||
|
|
||||||
config.before(:each, :needs_python) do
|
config.before(:each, :needs_python) do
|
||||||
skip "Python not installed." unless which("python")
|
skip "Python not installed." unless which("python")
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user