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() {