Кофе-брейк #148. Как превратить любую Java-программу в автономный EXE-файл
Источник: Mccue.dev Сегодня вы узнаете, как создать из Java-программы исполняемый EXE-файл для запуска в операционной системе Windows. Двойной щелчок для запуска — один из самых простых способов открыть программу. Если у человека, которому вы хотите показать свое приложение, уже установлена правильная версия Java, для запуска он может дважды щелкнуть файл jar. Если же у него не установлена Java, то есть способы создать исполняемый установщик, такой как jpackage. После этого для запуска кода нужно лишь нажать на этот установщик. Также можно использовать Native Image, чтобы превратить код в исполняемый файл, который не требует какой-либо дополнительной установки. В этой статье мы сосредоточимся на довольно простом подходе, который работает для любого приложения, независимо от того, какие зависимости вы включаете или какие функции JVM используете. Код, о котором сегодня пойдет речь, можно найти в репозитории GitHub, а исполняемые файлы с программой выложены здесь.
How to create a Windows Native Java application (generating .exe file)?
Let’s say you have created a Java application and packaged it into a jar.
Please enable JavaScript
You want to install this jar in another machine.
Traditionally , you need to first install java in that machine and then copy the jar . The application can be launched by running the jar.
Or you can use third party applications to convert the java application to an exe installation. Java itself didn’t provide this facility for a long time.
Java 8 came up with jpackage tool which can be used to create .exe files. These files can then be used to install a native Windows Application. No need to install Java in the client machine anymore!
Java again removed the tool in Java 11 version and brought it back in Java 14.
Let’s create a simple Java application which displays the message “Hello World” in a message box and convert it into an exe file. Then let’s install the application in a Windows machine.
Here is the algorithm:
STEP 1: Create the java application
STEP 2: Use ‘jar’ tool to generate a jar file
STEP 3: Use ‘jpackage’ tool to convert the jar file to exe
STEP 4: Install the exe file on a Windows machine
STEP 1: Create the java application :
I created a Java application with a single file which opens up a message box with the message “Hello World”.
Here is the code:
On running this , I get the below output:

Now let’s convert this project into a jar file
STEP 2: Use ‘jar’ tool to generate a jar file
Below is the path where I have created the Java application:
On building the project the classes got generated in out/production folder ( I am using IntelliJ):
A new folder named HelloWorld got generated in the above directory.
I navigated inside it and ran the below jar command:
helloworld.jar is the name of the jar file to generate
manifest.txt contains meta data about the jar (what is the path of the main class etc)
com is the directory (inside HelloWorld folder) which contains the Main class
To know more about generating jar files refer here : (Generating jar)
A jar file got generated as below: 
If you double click the jar file you get the same output: 
STEP 3: Use ‘jpackage’ tool to convert the jar file to exe
As a prerequisite to run jpackage tool to generate a exe file , you need to install Wix Toolset (suggested by Java) from here .
In the same path where I ran ‘jar’ command I ran the below jpackage command:
Following –name is the name of the exe file
Following –input (.) is the name of the directory which contains the jar file and other inputs (in this case the current directory)
Following –main-jar is the name of the jar which contains the class to be run
Following –main-class is the name of the class which is to be run.
–win-console means windows console need to be enabled – Command line and Java swing applications need this to be enabled.
–win-console flag is quite important. It took me a while to realise this was needed (Else application won’t be launched when you click on the installed exe)
Here is the screenshot of running the jar and jpackage commands:

Below is the exe file generated: 
STEP 4: Install the exe file on a Windows machine
Now let’s install the application using the exe file created.
Double click on helloworld-1.0.exe.
The application gets installed :

It gets installed in the default C:/Program Files directory: 
Go into the folder and click on helloworld.exe: 
Hello World message is shown!
Now let’s try to execute this exe file through command prompt from any path in Windows machine.
For this to happen , add the path of the exe to the ‘PATH’ environment variable of your machine:

Now go to any path in the command prompt and enter helloworld: 
We have created a native windows application!
As said earlier by default it gets installed in C:/Program Files directory .To prompt the user to provide the path while installation add the flag –win-dir-chooser to jpackage command:
If you want to create a short cut in the desktop once your application is installed add the flag –win-shortcut to the above command:
If you want to create a menu under the Start Menu add two flags –win-menu –win-menu-group and against –win-menu-group provide the name of the menu you want:
If you want to provide an icon for your application , use –icon flag. Copy the icon file in the same directory where you are running jpackage command.
Let’s run jpackage tool with all the above options and create an exe installation file.
Now if you run the generated exe file it will prompt you for installation directory: 
Once successfully installed , go to your desktop and notice a short cut created with the icon you chose. Double click the file and Hello World message gets displayed! 
Go to start menu and notice the app “Hello World”: 
Как создать исполняемый файл в Eclipse
wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали авторы-волонтеры.
Количество просмотров этой статьи: 63 603.
После завершения проекта в Eclipse ваша следующая цель будет заключаться в создании исполняемой версии проекта. Наиболее простой и стандартный процесс запуска Java-проекта является запуск исполняемого файла (.EXE). В этом руководстве мы рассмотрим, как превратить типичный файл . jar в исполняемый файл!
How can I convert my Java program to an .exe file?
If I have a Java source file (*.java) or a class file (*.class), how can I convert it to a .exe file?
I also need an installer for my program.
16 Answers 16
javapackager
The Java Packager tool compiles, packages, and prepares Java and JavaFX applications for distribution. The javapackager command is the command-line version.
– Oracle’s documentation
The javapackager utility ships with the JDK. It can generate .exe files with the -native exe flag, among many other things.
WinRun4J
- Uses an INI file for specifying classpath, main class, vm args, program args.
- Custom executable name that appears in task manager.
- Additional JVM args for more flexible memory use.
- Built-in icon replacer for custom icon.
- [more bullet points follow]
WinRun4J is an open source utility. It has many features.
packr
Packages your JAR, assets and a JVM for distribution on Windows, Linux and Mac OS X, adding a native executable file to make it appear like a native app. Packr is most suitable for GUI applications.
– packr README
packr is another open source tool.
JSmooth
JSmooth is a Java Executable Wrapper. It creates native Windows launchers (standard .exe) for your java applications. It makes java deployment much smoother and user-friendly, as it is able to find any installed Java VM by itself.
– JSmooth’s website
JSmooth is open source and has features, but it is very old. The last release was in 2007.
JexePack
JexePack is a command line tool (great for automated scripting) that allows you to package your Java application (class files), optionally along with its resources (like GIF/JPG/TXT/etc), into a single compressed 32-bit Windows EXE, which runs using Sun’s Java Runtime Environment. Both console and windowed applications are supported.
– JexePack’s website
JexePack is trialware. Payment is required for production use, and exe files created with this tool will display "reminders" without payment. Also, the last release was in 2013.
InstallAnywhere
InstallAnywhere makes it easy for developers to create professional installation software for any platform. With InstallAnywhere, you’ll adapt to industry changes quickly, get to market faster and deliver an engaging customer experience. And know the vulnerability of your project’s OSS components before you ship.
– InstallAnywhere’s website
InstallAnywhere is a commercial/enterprise package that generates installers for Java-based programs. It’s probably capable of creating .exe files.
Executable JAR files
As an alternative to .exe files, you can create a JAR file that automatically runs when double-clicked, by adding an entry point to the JAR manifest.
For more information
An excellent source of information on this topic is Excelsior’s article "Convert Java to EXE – Why, When, When Not and How".
Launch4j
Launch4j is a cross-platform tool for wrapping Java applications distributed as jars in lightweight Windows native executables. The executable can be configured to search for a certain JRE version or use a bundled one, and it’s possible to set runtime options, like the initial/max heap size. The wrapper also provides better user experience through an application icon, a native pre-JRE splash screen, a custom process name, and a Java download page in case the appropriate JRE cannot be found.
– Launch4j’s website
UPDATE: GCJ is dead. It was officially removed from the GCC project in 2016. Even before that, it was practically abandoned for seven years, and in any case it was never sufficiently complete to serve as a viable alternative Java implementation.
Go find another Java AOT compiler.
GCJ: The GNU Compiler for Java can compile Java source code into native machine code, including Windows executables.
Although not everything in Java is supported under GCJ, especially the GUI components (see What Java API’s are supported? How complete is the support? question from the FAQ). I haven’t used GCJ much, but from the limited testing I’ve done with console applications, it seems fine.
One downside of using GCJ to create an standalone executable is that the size of the resulting EXE can be quite large. One time I compiled a trivial console application in GCJ and the result was an executable about 1 MB. (There may be ways around this that I am not aware of. Another option would be executable compression programs.)
In terms of open-source installers, the Nullsoft Scriptable Install System is a scriptable installer. If you’re curious, there are user contributed examples on how to detect the presence of a JRE and install it automatically if the required JRE is not installed. (Just to let you know, I haven’t used NSIS before.)
For more information on using NSIS for installing Java applications, please take a look at my response for the question "What’s the best way to distribute Java applications?"
You could make a batch file with the following code:
and convert the .bat to an .exe using any .bat to .exe converter.
We’re using Install4J to build installers for windows or unix environments.
It’s easily customizable up to the point where you want to write scripts for special actions that cannot be done with standard dialogues. But even though we’re setting up windows services with it, we’re only using standard components.
- installer + launcher
- windows or unix
- scriptable in Java
- ant task
- lots of customizable standard panels and actions
- optionally includes or downloads a JRE
- can also launch windows services
- multiple languages
I think Launch4J is from the same company (just the launcher — no installer).
PS: sadly i’m not getting paid for this endorsement. I just like that tool.
The latest Java Web Start has been enhanced to allow good offline operation as well as allowing «local installation». It is worth looking into.
EDIT 2018: Java Web Start is no longer bundled with the newest JDK’s. Oracle is pushing towards a «deploy your app locally with an enclosed JRE» model instead.
IMHO JSmooth seems to do a pretty good job.
![]()
If you need to convert your entire application to native code, i.e. an EXE plus DLLs, there is ExcelsiorJET. I found it works well and provided an alternative to bundling a JRE.
EDIT: This was posted in 2010 — the product is no longer available.
I would say launch4j is the best tool for converting a java source code(.java) to .exe file You can even bundle a jre with it for distribution and the exe can even be iconified. Although the size of application increases, it makes sure that the application will work perfectly even if the user does not have a jre installed. It also makes sure that you are able to provide the specific jre required for your app without the user having to install it separately. But unfortunately, java loses its importance. Its multi platform support is totally ignored and the final app is only supported for windows. But that is not a big deal, if you are catering only to windows users.
![]()
As of JDK14, jpackage replaces javapackager mentioned in @Jay answer. The Windows version requires Wix 3.0 and it is fairly straightforward to take a java application and build an installer which provides EXE launcher.
It can also be used with jlink to build a cut-down Java runtime image which is bundled with the installer and only contains the set of modules needed to support your application. The jlink step will also be run implicitly by jpackage if no runtime is specified, but I prefer to make the JRE image separately as it will only change when you update JDK or add new module dependencies to your project.
Example main for Java class:
Here are example steps to build on Windows — obviously you’d set up your local build environment (Maven / ant / etc) to re-produce this:
Create a runtime image with jlink for the set of modules use by your application:
In case there are missing modules above, you should check the jlink JRE runtime image can run your app:
Use jpackage to generate installer, with app version based on date+hour (this saves on need to un-install every re-install) and to print out all system properties — remove the parameter "-XshowSettings:properties" after testing:
Run the installer:
Test the application:
You can use Janel. This last works as an application launcher or service launcher (available from 4.x).
Alternatively, you can use some java-to-c translator (e.g., JCGO) and compile the generated C files to a native binary (.exe) file for the target platform.
![]()
I can be forgiven for being against converting a java program to a .exe Application and I have My reasons. the Major one being that a java program can be compiled to a jar file from A lot of IDE’s. When the program is in .jar format, it can run in Multiple Platforms as opposed to .exe which would run Only in very limited Environment. I am for the Idea that Java Programs shoudl not be converted to Exe unless it is very neccesary. One can always write .bat files that runs the Java program while it is a jar file.
if it is really neccesary to convert it to exe, Jar2Exe converter silently does that and one can also attach Libraries that are compiled together with the Main Application.
![]()
You can convert jar to exe using jar2exe. However you need to purchase the software. If you need a open source software i would suggest JSmooth.
![]()
![]()
Cautionary note: Much has changed with packaging and deployment since this question was first asked. Most of the answers given are not even current with JIGSAW (Java 9+).
If the goal is to create OS specific packages, information is provided in Oracle Docs Java 17 Packaging Tool User Guide. This guide includes documentation for the jpackage tool, which allows one to create platform-specific packages for Linux, macOS and Windows. I assume the Windows-specific instructions should include arriving at an .exe file, since that remains the most familiar way for Windows users to install and run applications.