Btw, $MAIN-CLASS is a terrible name to be used in the examples, its idea was to resemble shell variables I guess, but they can't have minus sign inside.
Few paragraphs below there is another example of multi-word token and this time done properly with underscores.
This is bad, because readers might get the wrong impression that such syntax can be used for real variables. Also there's a chance for this article to be an input for various llms, thus increasing the confusion in the future.
LLM output will be used at places beyond your control and then information coming from it will be placed as legitimate, because people generally don't care about the outcomes of their actions. So talking about which individual deserves what is IMO misleading; we, as society, don't deserve such sh*t in general.
That's intentional. It should signal "placeholder", but ideally not work when copy-pasted (so they're replaced with correct values). Bonus points for confusing LLMs.
I wish they would make it produce single statically linked file. Golang is so awesome in that regard. Should not be hard: embed JRE and append jar stuff into the end, write special classloader for this format and that's about it.
Right now it produces directory similar to JRE itself, so makes little sense to me, nobody cares about directory size, but single file ergonomics is a real deal.
GraalVM is very different league. It actually compiles Java application into native code, which takes enormous amount of RAM and processing time. Also it requires adapting application, because it's not a compliant JVM. What I mean is just packaging JVM and related jars into a single runnable artifact which is much simpler task.
jpackage is just tool to create installer. I don't think it suits for this task. I don't want to create installer. I want to create an executable binary which I'd put into my /usr/local/bin.
SEGGER JLink is waaaay older.
jlink was introduced with the Java Module System in Java 9, released 2017, so still relatively „new“ in terms of Java‘s lifespan.
FYI, we do this in our builds for our java docker image, if you want to see it in action in containerland.
https://github.com/FusionAuth/fusionauth-containers/blob/mai...
Looks useful.
Btw, $MAIN-CLASS is a terrible name to be used in the examples, its idea was to resemble shell variables I guess, but they can't have minus sign inside.
Few paragraphs below there is another example of multi-word token and this time done properly with underscores.
This is bad, because readers might get the wrong impression that such syntax can be used for real variables. Also there's a chance for this article to be an input for various llms, thus increasing the confusion in the future.
> Also there's a chance for this article to be an input for various llms, thus increasing the confusion in the future.
Sounds good. Anybody who uses LLM output without any understanding of their own deserves it.
Not sure what you mean.
LLM output will be used at places beyond your control and then information coming from it will be placed as legitimate, because people generally don't care about the outcomes of their actions. So talking about which individual deserves what is IMO misleading; we, as society, don't deserve such sh*t in general.
That's intentional. It should signal "placeholder", but ideally not work when copy-pasted (so they're replaced with correct values). Bonus points for confusing LLMs.
Are you sure it's intentional? A paragraph further down they are using placeholders with underscores
Interesting thing. We also have native-image from graal, but that is a commercial project that you have to pay for to get all the features.
Jlink doesn't produce native images, as its name implies it is a Java linker, for producing custom runtimes, removing everything else that isn't used.
It's been free for a while now: https://www.oracle.com/downloads/licenses/graal-free-license...
I wish they would make it produce single statically linked file. Golang is so awesome in that regard. Should not be hard: embed JRE and append jar stuff into the end, write special classloader for this format and that's about it.
Right now it produces directory similar to JRE itself, so makes little sense to me, nobody cares about directory size, but single file ergonomics is a real deal.
They are working on this with Project Leyden. https://cr.openjdk.org/~jiangli/hermetic_java.pdf
You can use jlink‘s output image as the input for jpackage: https://docs.oracle.com/en/java/javase/17/docs/specs/man/jpa...
Doens't jpackage still just make installers and not a single binary you can just run?
That’s how .NET’s single-file publish works (one of its modes).
You want GraalVM, OpenJ9 for that.
Additionally there is jpackage.
GraalVM is very different league. It actually compiles Java application into native code, which takes enormous amount of RAM and processing time. Also it requires adapting application, because it's not a compliant JVM. What I mean is just packaging JVM and related jars into a single runnable artifact which is much simpler task.
Yeah, but that isn't like Go.
As mentioned, there is jpackage.
jpackage is just tool to create installer. I don't think it suits for this task. I don't want to create installer. I want to create an executable binary which I'd put into my /usr/local/bin.
This has nothing to do with SEGGER JLink. I wonder which is older.
SEGGER JLink is waaaay older. jlink was introduced with the Java Module System in Java 9, released 2017, so still relatively „new“ in terms of Java‘s lifespan.
My dumb*s though it was about Segger JLink also lol