feat: install multiple JDKs with same major version - #2271
Conversation
14d6edb to
9f510d6
Compare
|
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 What does change is how jdks are stored on disk. Before you'd just have a bunch of numbered directories in But now with the new devkitman version you could see this: 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. / ? or even to simplify have /installs//? just suggesting this to not mix-n-match too much in one folder directly. whats the signficance of "-jbang" in the name? |
JBang already needs those to work. The default jdk that gets added to your path is a link (a Junction to be precise).
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.
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". |
6decb1a to
db613f3
Compare
db613f3 to
3e306cf
Compare
3a2a8c8 to
8aeb565
Compare
|
@maxandersen this is now ready for review and devkitman 0.4.0 has been released so you don't need to build that to be able to test this PR. Given the fact that this is a pretty major change it must be tested quite well (I already did of course, but I might be "blind" to certain issues). It must also be tested that older JBang versions keep working even when newer JDKs get installed by this new version. Also, the workings and output of some of the jdk commands (eg |
|
NB: currently releasing 0.4.1 because of a test failure that only appeared when running JBang's GH CI. (Seems GH uses legacy DOS paths in their environment variables, eg. |
0ac3adf to
056cbeb
Compare
maxandersen
left a comment
There was a problem hiding this comment.
Should I ignore or honor the "do not merge" message ? :)
|
Sorry, this PR is ready for review but not ready to merge, I put it back to draft to make that clear. |
25edf97 to
f5e2801
Compare
|
Ok, I marked this PR ready for review again because everything works now. The integration tests are failing because of the Alpine test not being able to download the Jdk 17 it needs, but that's unrelated to this PR. |
f5e2801 to
fc85039
Compare
fc85039 to
2ad3d27
Compare
|
I ran bug? |
|
Ok, will look into that. But what would be the expected result here? Because I could think of two different interpretations:
There could even be a 3rd interpretation:
And depending on the other arguments you pass you might even expect a different result:
Option (1) might be difficult to explain, someone does Looking at this option (2) is perhaps the one easiest to explain and giving the least headaches? |
|
I assume if i say use Zulu 24 that 24 will give me Zulu. I think that's what you call option 2. But this also mean we need someway to say "don't put this as default" Maybe Jbang jdk install --extra 24 ? And somehow print what id to use if want to be explicit. |
|
Not sure, that It seems like a fix/workaround that's only useful in very specific situations that will be somewhat hard to explain when to use. Perhaps combining option (1) with a (THe problem might be: the default of what? There is a main/global default and a per-version default. DOes this option mean you want it to become the default for 24 or the main/global default?) |
|
How is the current PR intended to be used? it says install multiple jdks with same major version ...whats the command to do that if not |
|
Well the current PR doesn't yet give you all the options that I have in mind, because the changes were already big enough and I first wanted to get basic functionality working. Anyway, if you do And then you can run Right now we don't really show any other options, but you could easily imagine a Now that we have the basics working we just have to come up with good ideas and what options/features to add :-) |
|
For example, one of the things I want to allow is Imagine:
PD: I say |
|
about provider and tags - thats why I was suggesting more structured format, like |
|
#2133 is where that syntax mostly implemented. |
|
Sure, the actual syntax is irrelevant to devkitman, it's something that would be implemented by JBang itself and then implemented using the existing filtering system. |
Btw, it seems the current jbang doesn't handle this either. |
ccc6860 to
9219409
Compare
@maxandersen this should be fixed now, can you try this new version? |
|
finally got around trying this again. this time I seem to be getting a graalvm downloaded - yaay! one thing I did spot is a repeated read of release...is that expected? Whats the "Unable to read 'release' file in path: /Users/max/.jbang/cache/jdks/8" x 6 about? |
|
So after I ran the graalvm 24 is this:
but what is linked? and remind me what does 24 mean here vs 26-jbang? |
Added a flag `--for-version` (or `-v`) to the `jdk default` command to allow setting the default Jdk to use for a specific major version. This is necessary now that we allow multiple Jdks of the same major version to be installed simultaneously.
Added some more parameter checks to `jdk install`. Also refactored `Jdk` class.
9219409 to
2c621db
Compare
|
Yay! Only took 7 months 😁 |
Fixes #2118