A previous post of mine introduced and demonstrated jpackage, a utility that enables the packaging up of Java applications in native installer format for Windows, MacOS or Linux. Kindly disregard that post, and instead use the associated video in this article as a current reference. At the time of the original article's creation, it was in early prototype form and only available in a special build of JDK13. With the arrival of JDK14, jpackage has been formally incorporated into the JDK as an incubator module called jdk.incubator.jpackage. The rationale for revisiting this topic lies in the fact that APIs have changed; in particular, the command-line arguments associated with the jpackage utility are different.
The video that follows walks through the building of a sample modularized Java application, then proceeds to first create a jlink'ed runtime image of that application, before ultimately demonstrating how to use jpackage to create a Windows-native installer of that application. It then briefly shows how those same tasks can be performed on Linux and MacOS platforms too.
In case the video frame doesn't appear correctly in this article, here's the link: https://youtu.be/fI4L9cT3FpU
Considering its incubator status, it's possible that further (hopefully smaller) refinements may occur, based on user feedback, before the API is cast in stone. At which point it may may make sense to revisit yet again.