feat: install multiple JDKs with same major version
Fixes #2118
Interesting. How's it to be used/managed? Couldn't spot clearly the user impact if any?
The idea is that user impact at first is as close to zero as possible. Mainly to detect if the new system causes any backward compatibility issues.
For the user that is accustomed to installing jdks with jbang jdk install N nothing changes. That command keeps working as before, as does uninstall.
What does change is how jdks are stored on disk. Before you'd just have a bunch of numbered directories in ~/.jbang/cache/jdks, each one containing the jdk for that version, eg:
$ ls -F ~/.jbang/cache/jdks
11/ 17/ 21/ 24/ 25/ 8/
But now with the new devkitman version you could see this:
$ ls -F ~/.jbang/cache/jdks
11/ 17/ 21/ 24/ 25/ 26@ 26-ea+21-temurin-jbang/ 8/
As you can see I just installed a new version 26. And it gets stored in a directory with a full name (its id) and additionally a symlink was created with the name "26" that points to the actual directory.
This symlink serves two purposes: a) is serves as the "default" for that version, so if you have multiple version 26 jdks installed this symlink will point to your "preferred 26 version" and b) it maintains backward compatibility with older JBang versions that will only see the symlinks (older JBang versions ignore directories whose names are not integers).
I still have to make a couple of changes before explaining what else has changed. I will keep you posted in follow-up messages here.
gotcha.
and i assume its fine but just asking to know if some limits - on windows the symbolic linking also works ? no extra rights needed etc? in past we "survived" these even without extra rights as jsut one folder but i know some stuff improved here i just forget which :)
And wouldn't it be nicer if stored per vendor?, i.e.
whats the signficance of "-jbang" in the name?
on windows the symbolic linking also works ?
JBang already needs those to work. The default jdk that gets added to your path is a link (a Junction to be precise).
And wouldn't it be nicer if stored per vendor?, i.e. / ? or even to simplify have /installs//? just suggesting this to not mix-n-match too much in one folder directly.
I'm just somewhat following what I see others do. I also think it makes file/folder management slightly more complex to have more levels of directories. Given the fact that nobody should be looking directly at that folder and definitely not depend on its names and structure I feel it's okay to do it this way.
whats the signficance of "-jbang" in the name?
It's because the jdks are managed by the "jbang" provider. There's other providers that can create folders there, for example links to external jdks are handled by the "linked" provider and marked with "-linked".