@@ -85,7 +85,7 @@ abstract static class CmdBase implements Callable<Integer> {}
8585 static class ListInstalled extends CmdBase {
8686 @ Override
8787 public Integer call () {
88- JdkManager manager = JdkManager . create ();
88+ JdkManager manager = createJdkManager ();
8989 manager .getOrInstallJdk ("11+" );
9090 List <Jdk .InstalledJdk > jdks = manager .listInstalledJdks ();
9191 jdks .sort (Comparator .<Jdk >naturalOrder ().reversed ());
@@ -119,7 +119,7 @@ static class ListAvailable extends CmdBase {
119119 @ Override
120120 public Integer call () {
121121 System .err .println ("Retrieving available Java versions, this can take a moment..." );
122- JdkManager manager = JdkManager . create ();
122+ JdkManager manager = createJdkManager ();
123123 List <Jdk .AvailableJdk > jdks = manager .listAvailableJdks ();
124124 jdks .sort (Comparator .<Jdk >naturalOrder ().reversed ());
125125
@@ -183,7 +183,7 @@ static class Install extends CmdBase {
183183 @ Override
184184 public Integer call () {
185185 String versionOrId = javaVersionParamMixin .getVersionOrId (quiet );
186- JdkManager jdkMan = JdkManager . create ();
186+ JdkManager jdkMan = createJdkManager ();
187187 Jdk jdk = jdkMan .getInstalledJdk (versionOrId , JdkProvider .Predicates .canUpdate );
188188 if (!force && jdk != null ) {
189189 if (!quiet ) {
@@ -226,7 +226,7 @@ void setJavaVersion(String versionOrId) {
226226
227227 @ Override
228228 public Integer call () {
229- JdkManager jdkMan = JdkManager . create ();
229+ JdkManager jdkMan = createJdkManager ();
230230 Jdk .InstalledJdk jdk =
231231 jdkMan .getInstalledJdk (versionOrId , JdkProvider .Predicates .canUpdate );
232232 if (jdk == null ) {
@@ -283,7 +283,7 @@ static class Env extends CmdBase {
283283
284284 @ Override
285285 public Integer call () {
286- JdkManager jdkMan = JdkManager . create ();
286+ JdkManager jdkMan = createJdkManager ();
287287 Jdk jdk = jdkMan .getOrInstallJdk (javaVersionParamMixin .getVersionOrId (quiet ));
288288 return 0 ;
289289 }
@@ -305,7 +305,7 @@ public Integer call() throws IOException {
305305 if (cmd .isEmpty ()) {
306306 return 0 ;
307307 }
308- JdkManager jdkMan = JdkManager . create ();
308+ JdkManager jdkMan = createJdkManager ();
309309 Jdk .InstalledJdk jdk =
310310 jdkMan .getOrInstallJdk (javaVersionOptionMixin .getVersionOrId (quiet ));
311311 if (Paths .get (cmd .get (0 )).getNameCount () == 1 ) {
@@ -430,6 +430,29 @@ private static boolean isId(String s) {
430430 return s .matches ("[a-zA-Z0-9_\\ -.]+" );
431431 }
432432
433+ private static JdkManager createJdkManager () {
434+ Path installPath = JBangJdkProvider .getJBangJdkDir ();
435+ Path cachePath = cachePath ();
436+ JdkDiscovery .Config cfg = new JdkDiscovery .Config (installPath , cachePath , null );
437+ cfg .properties ()
438+ .put ("link" , JBangJdkProvider .getJBangConfigDir ().resolve ("currentjdk" ).toString ());
439+ return JdkManager .builder ().providers (JdkProviders .instance ().all (cfg )).build ();
440+ }
441+
442+ private static Path cachePath () {
443+ String cachePath = System .getenv ("JVM_CACHE" );
444+ Path cacheDir = null ;
445+ if (cachePath == null ) {
446+ cachePath = System .getProperty ("jvm.cache" );
447+ if (cachePath != null ) {
448+ cacheDir = Paths .get (cachePath );
449+ } else {
450+ cacheDir = Paths .get (System .getProperty ("user.home" ), ".cache" , "jvm" );
451+ }
452+ }
453+ return cacheDir ;
454+ }
455+
433456 static CommandLine .IExecutionExceptionHandler errorHandler =
434457 (ex , commandLine , parseResult ) -> {
435458 System .err .println ("Error: " + ex .getMessage ());
0 commit comments