From 755feb043fac1199975c5b1bdf028727f22fdf06 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 19:01:05 +0000 Subject: [PATCH 1/4] Initial plan From 9ecd4031b27caadd83f20c5ee552ad8b1e06f489 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 19:05:00 +0000 Subject: [PATCH 2/4] Add JavaFX bundled version support with -fx suffix Co-authored-by: bytemain <13938334+bytemain@users.noreply.github.com> --- README.md | 23 ++++++++++++++++++++++- README_CN.md | 23 ++++++++++++++++++++++- hooks/available.lua | 19 +++++++++++++++---- hooks/pre_install.lua | 25 +++++++++++++++++++++++-- lib/distribution_version.lua | 13 +++++++++++++ 5 files changed, 95 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index abe22ad..60f2b86 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Support for multiple JDK distributions, such as: Oracle, Graalvm, Eclipse & more # Usage -**Parameter Format**: `x.y.z-distribution` +**Parameter Format**: `x.y.z-distribution` or `x.y.z-fx-distribution` (for JavaFX bundled versions) ```shell # add plugin for vfox @@ -21,6 +21,10 @@ vfox install java@17.0.17-tem # Temurin vfox install java@17.0.17-zulu # Zulu vfox install java@17-graal # GraalVM (latest 17.x) +# install JavaFX bundled versions (use -fx suffix) +vfox install java@21.0.5-fx-zulu # Zulu with JavaFX +vfox install java@21.0.5-fx-librca # Liberica with JavaFX + # view all available versions vfox search java # view all openjdk versions vfox search java tem # view all temurin versions @@ -28,6 +32,23 @@ vfox search java zulu # view all zulu versions vfox search java graal # view all graalvm versions ``` +## JavaFX Support + +Some distributions provide JDK versions bundled with JavaFX. These versions are displayed with the `-fx` suffix in the version list and marked with "JavaFX" in the notes. To install a JavaFX bundled version, add `-fx` to the version string: + +```shell +# List versions (JavaFX versions will show -fx suffix) +vfox search java zulu +# Example output: +# 21.0.5-zulu +# 21.0.5-fx-zulu # JavaFX +# 17.0.13-zulu +# 17.0.13-fx-zulu # JavaFX + +# Install JavaFX bundled version +vfox install java@21.0.5-fx-zulu +``` + # Supported JDK Distributions > Thanks [SDKMAN](https://sdkman.io/jdks)! diff --git a/README_CN.md b/README_CN.md index 80b2e77..b2ed060 100644 --- a/README_CN.md +++ b/README_CN.md @@ -8,7 +8,7 @@ # 使用 -**参数格式**: x.y.z-distribution +**参数格式**: `x.y.z-distribution` 或 `x.y.z-fx-distribution` (带 JavaFX 的版本) ```shell # 添加插件 @@ -18,12 +18,33 @@ vfox add java vfox install java@x.y.z # 默认使用openjdk vfox install java@x.y.z-graal # 使用graalvm +# 安装带 JavaFX 的版本 (使用 -fx 后缀) +vfox install java@21.0.5-fx-zulu # 带 JavaFX 的 Zulu +vfox install java@21.0.5-fx-librca # 带 JavaFX 的 Liberica + # 查看所有可用版本 vfox search java all # 查看所有sdk版本 vfox search java # 查看所有openjdk版本 vfox search java graal # 查看所有graalvm版本 ``` +## JavaFX 支持 + +部分发行版提供了捆绑 JavaFX 的 JDK 版本。这些版本在版本列表中会显示 `-fx` 后缀,并在备注中标注 "JavaFX"。安装带 JavaFX 的版本时,需要在版本字符串中添加 `-fx`: + +```shell +# 查看版本列表 (带 JavaFX 的版本会显示 -fx 后缀) +vfox search java zulu +# 示例输出: +# 21.0.5-zulu +# 21.0.5-fx-zulu # JavaFX +# 17.0.13-zulu +# 17.0.13-fx-zulu # JavaFX + +# 安装带 JavaFX 的版本 +vfox install java@21.0.5-fx-zulu +``` + # 支持的JDK发行版 > Thanks [SDKMAN](https://sdkman.io/jdks)! diff --git a/hooks/available.lua b/hooks/available.lua index 3e17d6c..6373487 100644 --- a/hooks/available.lua +++ b/hooks/available.lua @@ -29,24 +29,35 @@ function PLUGIN:Available(ctx) for _, jdk in ipairs(jdks) do local v = jdk.java_version local short = jdk.short + + -- Add -fx suffix for JavaFX bundled versions + local fx_suffix = "" + if jdk.javafx_bundled == true then + fx_suffix = "-fx" + end + if query == "all" then - v = v .. "-" .. short + v = v .. fx_suffix .. "-" .. short elseif query == "open" then - v = v + v = v .. fx_suffix else local distribution = distribution_version_parser.parse_distribution(query) if not distribution then error("Unsupported distribution: " .. query) end - v = v .. "-" .. distribution.short_name + v = v .. fx_suffix .. "-" .. distribution.short_name end if not seen[v] then seen[v] = true -- check if version exists + local note = jdk.term_of_support == "lts" and "LTS" or "" + if jdk.javafx_bundled == true then + note = note == "" and "JavaFX" or note .. ", JavaFX" + end table.insert(result, { version = v, - note = jdk.term_of_support == "lts" and "LTS" or "" + note = note }) end diff --git a/hooks/pre_install.lua b/hooks/pre_install.lua index 1ca4f43..5f325f6 100644 --- a/hooks/pre_install.lua +++ b/hooks/pre_install.lua @@ -17,14 +17,35 @@ function PLUGIN:PreInstall(ctx) if not jdks or #jdks == 0 then error("No JDK found for " .. ctx.version .. " on " .. RUNTIME.osType .. "/" .. RUNTIME.archType .. ". Please check available versions with 'vfox search java'") end - local jdk = jdks[1] + + -- Filter JDKs based on JavaFX requirement + local filtered_jdks = {} + for _, jdk in ipairs(jdks) do + local jdk_has_fx = jdk.javafx_bundled == true + if distribution_version.javafx_bundled == jdk_has_fx then + table.insert(filtered_jdks, jdk) + end + end + + if #filtered_jdks == 0 then + local fx_msg = distribution_version.javafx_bundled and " with JavaFX" or " without JavaFX" + error("No JDK found for " .. ctx.version .. fx_msg .. " on " .. RUNTIME.osType .. "/" .. RUNTIME.archType .. ". Please check available versions with 'vfox search java'") + end + + local jdk = filtered_jdks[1] local info = json.decode(httpGet(jdk.links.pkg_info_uri, "Failed to fetch jdk info")).result[1] -- TODO: checksum -- local checksum = info.checksum -- if checksum == "" and info.checksum_uri ~= "" then -- checksum = httpGet(info.checksum_uri, "Failed to fetch checksum") -- end - local finalV = distribution_version.distribution.short_name == "open" and jdk.java_version or jdk.java_version .. "-" .. distribution_version.distribution.short_name + + -- Build final version string with fx suffix if needed + local fx_suffix = "" + if jdk.javafx_bundled == true then + fx_suffix = "-fx" + end + local finalV = distribution_version.distribution.short_name == "open" and jdk.java_version .. fx_suffix or jdk.java_version .. fx_suffix .. "-" .. distribution_version.distribution.short_name return { -- [info.checksum_type] = checksum, url = info.direct_download_uri, diff --git a/lib/distribution_version.lua b/lib/distribution_version.lua index 5ad2120..9c1eef1 100644 --- a/lib/distribution_version.lua +++ b/lib/distribution_version.lua @@ -59,6 +59,18 @@ function distribution_version.parse_version (arg) local version_parts = strings.split(arg, "-") local version local distribution + local javafx_bundled = false + + -- Check for "fx" in any part and remove it, setting javafx_bundled flag + local filtered_parts = {} + for _, part in ipairs(version_parts) do + if part == "fx" then + javafx_bundled = true + else + table.insert(filtered_parts, part) + end + end + version_parts = filtered_parts if not version_parts[2] then -- no parts, check if we got a distribution name without version @@ -90,6 +102,7 @@ function distribution_version.parse_version (arg) return { version = version, distribution = distribution, + javafx_bundled = javafx_bundled, } end From a9f03e1bf41d9e8a57666ae519a242b2b32a46fc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 19:06:34 +0000 Subject: [PATCH 3/4] Address code review feedback: improve readability Co-authored-by: bytemain <13938334+bytemain@users.noreply.github.com> --- hooks/available.lua | 13 +++++-------- hooks/pre_install.lua | 8 +++++++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/hooks/available.lua b/hooks/available.lua index 6373487..48fa26f 100644 --- a/hooks/available.lua +++ b/hooks/available.lua @@ -7,17 +7,18 @@ local distribution_version_parser = require("distribution_version") function PLUGIN:Available(ctx) local query = ctx.args[1] or "open" local jdks = {} + local distribution = nil if query == "all" then - for _, distribution in ipairs(distribution_version_parser.distributions) do - local tempJdks = foojay.fetchtJdkList(distribution.name, "") + for _, dist in ipairs(distribution_version_parser.distributions) do + local tempJdks = foojay.fetchtJdkList(dist.name, "") for _, jdk in ipairs(tempJdks) do - jdk.short = distribution.short_name + jdk.short = dist.short_name table.insert(jdks, jdk) end end else - local distribution = distribution_version_parser.parse_distribution(query) + distribution = distribution_version_parser.parse_distribution(query) if not distribution then error("Unsupported distribution: " .. query) end @@ -41,10 +42,6 @@ function PLUGIN:Available(ctx) elseif query == "open" then v = v .. fx_suffix else - local distribution = distribution_version_parser.parse_distribution(query) - if not distribution then - error("Unsupported distribution: " .. query) - end v = v .. fx_suffix .. "-" .. distribution.short_name end diff --git a/hooks/pre_install.lua b/hooks/pre_install.lua index 5f325f6..da44927 100644 --- a/hooks/pre_install.lua +++ b/hooks/pre_install.lua @@ -45,7 +45,13 @@ function PLUGIN:PreInstall(ctx) if jdk.javafx_bundled == true then fx_suffix = "-fx" end - local finalV = distribution_version.distribution.short_name == "open" and jdk.java_version .. fx_suffix or jdk.java_version .. fx_suffix .. "-" .. distribution_version.distribution.short_name + + local finalV + if distribution_version.distribution.short_name == "open" then + finalV = jdk.java_version .. fx_suffix + else + finalV = jdk.java_version .. fx_suffix .. "-" .. distribution_version.distribution.short_name + end return { -- [info.checksum_type] = checksum, url = info.direct_download_uri, From 04b4dc410459f1246cf73bd4eb769ef34f311f93 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 19:13:04 +0000 Subject: [PATCH 4/4] Move -fx suffix after distribution name (e.g., zulu-fx instead of fx-zulu) Co-authored-by: bytemain <13938334+bytemain@users.noreply.github.com> --- README.md | 16 ++++++++-------- README_CN.md | 16 ++++++++-------- hooks/available.lua | 6 +++--- hooks/pre_install.lua | 4 ++-- lib/distribution_version.lua | 13 ++++--------- 5 files changed, 25 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 60f2b86..949a3a9 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Support for multiple JDK distributions, such as: Oracle, Graalvm, Eclipse & more # Usage -**Parameter Format**: `x.y.z-distribution` or `x.y.z-fx-distribution` (for JavaFX bundled versions) +**Parameter Format**: `x.y.z-distribution` or `x.y.z-distribution-fx` (for JavaFX bundled versions) ```shell # add plugin for vfox @@ -21,9 +21,9 @@ vfox install java@17.0.17-tem # Temurin vfox install java@17.0.17-zulu # Zulu vfox install java@17-graal # GraalVM (latest 17.x) -# install JavaFX bundled versions (use -fx suffix) -vfox install java@21.0.5-fx-zulu # Zulu with JavaFX -vfox install java@21.0.5-fx-librca # Liberica with JavaFX +# install JavaFX bundled versions (use -fx suffix after distribution) +vfox install java@21.0.5-zulu-fx # Zulu with JavaFX +vfox install java@21.0.5-librca-fx # Liberica with JavaFX # view all available versions vfox search java # view all openjdk versions @@ -34,19 +34,19 @@ vfox search java graal # view all graalvm versions ## JavaFX Support -Some distributions provide JDK versions bundled with JavaFX. These versions are displayed with the `-fx` suffix in the version list and marked with "JavaFX" in the notes. To install a JavaFX bundled version, add `-fx` to the version string: +Some distributions provide JDK versions bundled with JavaFX. These versions are displayed with the `-fx` suffix after the distribution name in the version list and marked with "JavaFX" in the notes. To install a JavaFX bundled version, add `-fx` after the distribution name: ```shell # List versions (JavaFX versions will show -fx suffix) vfox search java zulu # Example output: # 21.0.5-zulu -# 21.0.5-fx-zulu # JavaFX +# 21.0.5-zulu-fx # JavaFX # 17.0.13-zulu -# 17.0.13-fx-zulu # JavaFX +# 17.0.13-zulu-fx # JavaFX # Install JavaFX bundled version -vfox install java@21.0.5-fx-zulu +vfox install java@21.0.5-zulu-fx ``` # Supported JDK Distributions diff --git a/README_CN.md b/README_CN.md index b2ed060..b6f9f93 100644 --- a/README_CN.md +++ b/README_CN.md @@ -8,7 +8,7 @@ # 使用 -**参数格式**: `x.y.z-distribution` 或 `x.y.z-fx-distribution` (带 JavaFX 的版本) +**参数格式**: `x.y.z-distribution` 或 `x.y.z-distribution-fx` (带 JavaFX 的版本) ```shell # 添加插件 @@ -18,9 +18,9 @@ vfox add java vfox install java@x.y.z # 默认使用openjdk vfox install java@x.y.z-graal # 使用graalvm -# 安装带 JavaFX 的版本 (使用 -fx 后缀) -vfox install java@21.0.5-fx-zulu # 带 JavaFX 的 Zulu -vfox install java@21.0.5-fx-librca # 带 JavaFX 的 Liberica +# 安装带 JavaFX 的版本 (在发行版名称后添加 -fx 后缀) +vfox install java@21.0.5-zulu-fx # 带 JavaFX 的 Zulu +vfox install java@21.0.5-librca-fx # 带 JavaFX 的 Liberica # 查看所有可用版本 vfox search java all # 查看所有sdk版本 @@ -30,19 +30,19 @@ vfox search java graal # 查看所有graalvm版本 ## JavaFX 支持 -部分发行版提供了捆绑 JavaFX 的 JDK 版本。这些版本在版本列表中会显示 `-fx` 后缀,并在备注中标注 "JavaFX"。安装带 JavaFX 的版本时,需要在版本字符串中添加 `-fx`: +部分发行版提供了捆绑 JavaFX 的 JDK 版本。这些版本在版本列表中会在发行版名称后显示 `-fx` 后缀,并在备注中标注 "JavaFX"。安装带 JavaFX 的版本时,需要在发行版名称后添加 `-fx`: ```shell # 查看版本列表 (带 JavaFX 的版本会显示 -fx 后缀) vfox search java zulu # 示例输出: # 21.0.5-zulu -# 21.0.5-fx-zulu # JavaFX +# 21.0.5-zulu-fx # JavaFX # 17.0.13-zulu -# 17.0.13-fx-zulu # JavaFX +# 17.0.13-zulu-fx # JavaFX # 安装带 JavaFX 的版本 -vfox install java@21.0.5-fx-zulu +vfox install java@21.0.5-zulu-fx ``` # 支持的JDK发行版 diff --git a/hooks/available.lua b/hooks/available.lua index 48fa26f..fad3171 100644 --- a/hooks/available.lua +++ b/hooks/available.lua @@ -31,18 +31,18 @@ function PLUGIN:Available(ctx) local v = jdk.java_version local short = jdk.short - -- Add -fx suffix for JavaFX bundled versions + -- Add -fx suffix for JavaFX bundled versions (after distribution name) local fx_suffix = "" if jdk.javafx_bundled == true then fx_suffix = "-fx" end if query == "all" then - v = v .. fx_suffix .. "-" .. short + v = v .. "-" .. short .. fx_suffix elseif query == "open" then v = v .. fx_suffix else - v = v .. fx_suffix .. "-" .. distribution.short_name + v = v .. "-" .. distribution.short_name .. fx_suffix end if not seen[v] then diff --git a/hooks/pre_install.lua b/hooks/pre_install.lua index da44927..ad5fb0a 100644 --- a/hooks/pre_install.lua +++ b/hooks/pre_install.lua @@ -40,7 +40,7 @@ function PLUGIN:PreInstall(ctx) -- checksum = httpGet(info.checksum_uri, "Failed to fetch checksum") -- end - -- Build final version string with fx suffix if needed + -- Build final version string with fx suffix if needed (after distribution name) local fx_suffix = "" if jdk.javafx_bundled == true then fx_suffix = "-fx" @@ -50,7 +50,7 @@ function PLUGIN:PreInstall(ctx) if distribution_version.distribution.short_name == "open" then finalV = jdk.java_version .. fx_suffix else - finalV = jdk.java_version .. fx_suffix .. "-" .. distribution_version.distribution.short_name + finalV = jdk.java_version .. "-" .. distribution_version.distribution.short_name .. fx_suffix end return { -- [info.checksum_type] = checksum, diff --git a/lib/distribution_version.lua b/lib/distribution_version.lua index 9c1eef1..2688551 100644 --- a/lib/distribution_version.lua +++ b/lib/distribution_version.lua @@ -61,16 +61,11 @@ function distribution_version.parse_version (arg) local distribution local javafx_bundled = false - -- Check for "fx" in any part and remove it, setting javafx_bundled flag - local filtered_parts = {} - for _, part in ipairs(version_parts) do - if part == "fx" then - javafx_bundled = true - else - table.insert(filtered_parts, part) - end + -- Check if the last part is "fx" and remove it, setting javafx_bundled flag + if version_parts[#version_parts] == "fx" then + javafx_bundled = true + table.remove(version_parts) end - version_parts = filtered_parts if not version_parts[2] then -- no parts, check if we got a distribution name without version