From 1cf3f620b89c6cba134f8f5b3bd29c07fe33b6c5 Mon Sep 17 00:00:00 2001 From: Tako Schotanus Date: Thu, 5 Mar 2026 12:37:00 +0100 Subject: [PATCH] feat: added support for listing distributions Also added flags to set providers and distros --- pom.xml | 2 +- src/main/java/org/codejive/jvm/Main.java | 64 +++++++++++++++++++++++- 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 581b8ea..48bda7f 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ 11 0.11.2 org.codejive.jvm.Main - 0.4.3 + 0.4.4 5.6 0.3.2 4.7.7 diff --git a/src/main/java/org/codejive/jvm/Main.java b/src/main/java/org/codejive/jvm/Main.java index 487348c..44c2232 100644 --- a/src/main/java/org/codejive/jvm/Main.java +++ b/src/main/java/org/codejive/jvm/Main.java @@ -34,6 +34,7 @@ Main.ListInstalled.class, Main.ListAvailable.class, Main.ListProviders.class, + Main.ListDistros.class, Main.Install.class, Main.Uninstall.class, Main.Default.class, @@ -43,10 +44,31 @@ Main.Run.class }) public class Main { - + static List providers; + static List distros; static boolean verbose = false; static boolean quiet = false; + @Option( + names = {"-P", "--providers"}, + description = + "Selects the providers to use. Run 'jvm list-providers' to see the available providers. Multiple providers can be specified separated by comma.", + split = ",", + scope = CommandLine.ScopeType.INHERIT) + void setProviders(List providers) { + Main.providers = providers; + } + + @Option( + names = {"-D", "--distros"}, + description = + "Selects the distributions to use when installing JDKs. Run 'jvm list-distros' to see the available distributions. Multiple distributions can be specified separated by comma.", + split = ",", + scope = CommandLine.ScopeType.INHERIT) + void setDistros(List distros) { + Main.distros = distros; + } + @Option( names = {"-h", "--help"}, description = "Show this help message and exit.", @@ -167,6 +189,35 @@ public Integer call() { } } + @Command( + name = "list-distros", + aliases = {"ld"}, + description = + "List the available JDK distributions that can be used for '--distros' options") + static class ListDistros extends CmdBase { + @Override + public Integer call() { + System.err.println("Retrieving available distributions, this can take a moment..."); + JdkManager manager = createJdkManager(); + List distros = manager.listDistros(); + distros.sort(Comparator.comparing(JdkDistroQuery.JdkDistro::name)); + + AsciiTable at = new AsciiTable(); + CWC_LongestLine cwc = new CWC_LongestLine(); + at.getRenderer().setCWC(cwc); + at.addRule(); + at.addRow("Distribution"); + at.addRule(); + for (JdkDistroQuery.JdkDistro distro : distros) { + at.addRow(distro.name()); + } + at.addRule(); + System.out.println(at.render()); + + return 0; + } + } + @Command( name = "install", aliases = {"i"}, @@ -436,7 +487,16 @@ private static JdkManager createJdkManager() { JdkDiscovery.Config cfg = new JdkDiscovery.Config(installPath, cachePath, null); cfg.properties() .put("link", JBangJdkProvider.getJBangConfigDir().resolve("currentjdk").toString()); - return JdkManager.builder().providers(JdkProviders.instance().all(cfg)).build(); + if (distros != null && !distros.isEmpty()) { + cfg.properties().put("distro", String.join(",", distros)); + } + List provs; + if (providers == null || providers.isEmpty()) { + provs = JdkProviders.instance().all(cfg); + } else { + provs = JdkProviders.instance().parseNames(cfg, providers.toArray(new String[0])); + } + return JdkManager.builder().providers(provs).build(); } private static Path cachePath() {