Launch4j - Cross-platform Java executable wrapper

3.50

## Changelog

#### Changes in version 3.50 (13-11-2022)

- Ticket #218, #222 Support min/max version check during path search (Barry McGillin, Han Shum).
- Ticket #224 Setting multiple relative paths for bundled JREs is not working (Wladimir Leite).
- Simplified and consistent configuration for finding 64-Bit runtimes and JDKs during path and registry search.
- Path is now the primary search, registry secondary for better compatibility with latest runtimes.
- Please see the docs regarding configuration changes.

#### Changes in version 3.14 (07-03-2021)

- Updated dependencies and switched to Java 1.8.
- Ticket #120 Switched to FlatLaf and removed WindowsLookAndFeel for multi-platform compatibility.
- Ticket #211 Fixed JNI header missing file.

#### Changes in version 3.13 (03-02-2021)

- FR #127 Added multiple bundled JRE path search (%JAVA_HOME%).
- Allow equal sign in environment variable assignments.
- Fix sign4j warnings for implicit definition of lseek, read, write, close, and access (foss1024).
- Add launch4j console mode launch script for *nix (Luke S).
- Tickets #172, #186, #198, #200, #206 Launch4j GUI supports also Java 1.9 and up.

#### Changes in version 3.12 (17-05-2018)

- Ticket #179, #183 The generated executable fully supports Java 9 and newer (Sergey Karpushin).
- Ticket #161 Support of update version higher than 99 (Sergey Karpushin).
- Ticket #177 Launching on Java 9 JDK and newer is now possible (not just JRE).
- Known issue: launch4j itself does not support Java 9 Early Access, use a public release instead or Java 10.

#### Changes in version 3.11 (27-06-2017)

- Log more regarding Java search and missing resources.
- Log resource file during build.
- Added basic Java 9 support (only major version is detected right now due to version scheme change).
- Ticket #145 Allow literal use of % in JRE options and set environment variables, use %% (blueskyhigh).
- Added Linux 64-bit binaries (Sebastian Bögl).
- Added IBM Java 1.8 support.
- JNI header: fixed a crash where launch4j would try to `free` non-heap memory (Alexander Floh).
- Ticket #160 Removed old Mac OS X package which caused problems on newer versions of the system.

#### Changes in version 3.9 (20-07-2016)

- Ticket #146 Fixed java version check where the update number was greater than 99 (e.g. 1.8.0_101).
- Enlarged the total classpath length to 30KB.
- Ticket #142 Unbound VersionInfo returns wrong LanguageID (Sebastian Bögl).
- Ticket #141 Ensure encoding of resource file to be iso-8859-1 (Thomas Scheithauer).
- More reactive splash screen response to main window appearance (Federico Fissore).
- FR #95 Launch4j should return an exit value (Sebastian Bögl).
- FR #94 Add the working directory classifier for OS X (Sebastian Bögl).
- FR #39 Launch Java VM through JNI (Ryan Rusaw) - BETA!
- FR #69 Configure the language property of generated executables (Sebastian Bögl).
- FR #77 Add legal trademarks as an additional field in version info tab (Sebastian Bögl).
- Added a simple example how to use the Maven plugin (demo/ExitCodeApp).

#### Changes in version 3.8 (09-05-2015)

- FR #59 Mavenized launch4j (thanks to taxone, Paul Jungwirth, Lukasz Lenart).
- Ticket #139 Sign4j compiles and works on Linux (Tim Angus).

#### Changes in version 3.7 (01-03-2015)

- Fixed false positive virus warnings that appeared in version 3.6.

#### Changes in version 3.6 (06-01-2015)

- FR #86 The 32/64 bit search is fully configurable (64, 64/32, 32/64, 32) - added option 32/64.
- FR #70 Java search sequence - bundled JRE can be used before or after the min/max version search (bundledJreAsFallback).
- Fixed: Crash when classpath contained wildcard patterns where the dependency was in the same directory as the launcher.
- Fixed launch4j GUI application closing - the process was still running.

#### Changes in version 3.5 (09-10-2014)

- Ticket #75 Fixed exit value of -1 results in launch4j error.
- Ticket #133, #134 Fixed runtimeBits JRE option.
- FR #28, #72 Ability to restart the application based on exit code (Pascal Gruen, GK).

#### Changes in version 3.4 (21-04-2014)

- FR #61 Added a new special variable JREHOMEDIR (Stefan Knoefel).
- Ticket #130 Removed ant from launch4j classpath to fix problems with other ant versions.
- Updated JGoodies libraries.
- Added logging based on launch4j environment variable for file association launch testing.

#### Changes in version 3.3 (02-04-2014)

- FR #60 Check the registry during JRE search, so that only valid runtimes are taken into account.
- Ticket #128 Updated MAC OS X 10.8 windres to 2.24.51.20140326 - version info was compiled incorrectly (Code Buddy).
- Added support for Japanese characters (Toshimm).
- Ticket #82, #125 Take configuration encoding into account and save file with UTF-8 encoding.

#### Changes in version 3.2 (24-03-2014)

- Ticket #126, #127: Fixed crash when classpath was not defined.
- Corrected problem with loading jvm options from ini file when bundled JRE is used.
- FR #63, #80 Add possibility to configure 32/64 bit search.
- Improved logging (--l4j-debug and --l4j-debug-all).

#### Changes in version 3.1.0-beta2 (20-08-2013)

- Removed the custom process name feature which was not compatible with newer Windows versions.
- #121 Fixed heap calculation on systems with more than 4GB of memory.
- #115 Added 64-bit bundled JRE option to control when the 32-bit maximum heap is applied.
- Reduced the 32-bit max heap size to the safer 1GB.
- Changes in --l4j-debug for better readability.
- Fixed Can discard changes popup which appeared even if no changes were made.
- Corrected permissions, owner and group in tgz packages.
- #117 Fixed launch4j home dir search in case of jar and class files.
- #111 Support paths with spaces in Linux systems.
- #91 Linux launch4j starting script no longer changes the current directory.
- #77 Allow line feeds in custom messages.
- #57 Escape backslashes.

#### Changes in version 3.1.0-beta1 (02-12-2012)

- Migrated code to Java 1.6.
- Updated binutils to 2.22
- Added Max OS X x86 support (two versions).
- Added feature to digitally sign executables - sign4j by the Bramfeld team, sponsored by Servoy.
- FR #3569093 Support Windows Security Features of the Windows 8 certification kit (Luc Bruninx).

#### Changes in version 3.0.2 (02-01-2011)

- Fixed the command line in Exec error message.
- Fixed set environment variable bug.
- Added wrapper logging to launch4j GUI.
- Fixed critical bug: heap size over the limit.

#### Changes in version 3.0.1 (20-07-2008)

- Enhanced the runtime logging (--l4j-debug).
- Fixed critical bug #1925387 64-bit JDK detection problem caused a runtime search error (found by Stivo).
- Fixed bug #1919406, #1989479 Not every option is loaded from saved xml file (found by Robert Lachner, Jan-Philipp Rathje).
- Fixed bug #1930222 Simple typo (found by Daniel).

#### Changes in version 3.0.0 (16-03-2008)

- FR #1390075 Added dynamic initial/max heap values.
- FR #1707827 Allow to prefer JDK private runtimes over JREs (Ian Roberts).
- FR #1730245 Allow to run only a single aplication instance (Sylvain Mina).
- FR #1391610 Added IBM JRE/JDK support.
- Added environment variable expansion in bundled JRE path.
- Fixed critical bug #1882524 JRE detection problem on 64-bit Windows.
- Fixed bug #1758912 Vista elevation to full administrator privileges.
- Fixed bug #1784341 Problems with spaces in paths under linux (Michael Piefel).
- Fixed bug where /bin was appended to path environment variable instead of jre_path/bin.

#### Changed license to BSD, MIT (26-01-2008)

- The upcoming Launch4j 3.0.0 release will be licensed under the much more liberal new BSD license. The head subproject (the binary header attached to wrapped jars) will be licensed under the similar MIT license.

#### Changes in version 3.0.0-pre2 (29-10-2006)

- Enhanced GUI.
- Redesigned error reporting.
- Added custom error messages.
- Added support website feature.
- Added PWD and OLDPWD special variables and access to the registry.
- Runtime ini file extension changed to .l4j.ini, added comments (#).
- FR #1427811 Initial process priority.
- FR #1547339 Added VarFileInfo structure to Version Info (Stephan Laertz).
- FR #1584295 Updated documentation for --l4j-debug.
- Fixed <jarArgs/> and <args/> config conversion bug (found by Dafe Simonek).
- Fixed the Ant task exception reporting bug, added tmpdir and bindir attributes.
- Fixed bug #1563415 Problem with launching application when ini file exists (found by mojomax).
- Fixed bug #1527619 Console header wildcard expansion (found by erikjv).
- Fixed bug #1544167 NPE when dontwrap and only classpath given (found by Hendrik Schreiber).
- Fixed bug #1584264 Dropdown boxes get mixed up (found by Larsen).

#### News (17-10-2006)

- Launch4j Maven Plugin by Paul A. Jungwirth

#### Changes in version 3.0.0-pre1 (21-07-2006)

- Improved configuration file format and embedded Ant config.
- Launch executable jars, regular jars and class files.
- Added dynamic classpath resolution with environment variable references and wildcards.
- Added option to set environment variables before launching the application.
- New command line switches to change the compiled options.
- Improved debug information.
- Added support for XP visual style manifests.
- Added option to disable use of private JREs.
- Many small fixes and improvements...

#### Configuration file changes in 3.x

- Previous formats (1.x and 2.x) are supported.
- <headerType> accepts gui|console
- <jarArgs> was changed to <cmdLine>
- <launch4jConfig><headerObjects><file> was changed to <launch4jConfig><obj>
- <launch4jConfig><libs><file> was changed to <launch4jConfig><lib>
- <launch4jConfig><jre><args> was changed to multiple <launch4jConfig><jre><opt>

#### Embedded Ant configuration changes in 3.x

- <jre args="value"> was changed to <jre><opt>value</opt></jre>
- Now it's possible to define headerObjects, libs and classpath.

#### Changes in version 2.1.5 (21-07-2006)

- Changed the Java download site to http://java.com/download.
- Now it's possible to use absolute and relative paths to specify the bundled JRE.

#### Changes in version 2.1.4 (15-06-2006)

- Fixed bug #1503996 Only the first wrapper instance had a custom process name (found by Helge Böhme).

#### Changes in version 2.1.3 (31-05-2006)

- Fixed bug #1497453 Ant task doesn't support relative jar path with '..' (found by Aston, Pavel Moukhataev).
- Jar argument size limit is now 16KB.
- Environment variable size limit raised to 32KB.
- Allow to concatenate multiple env. variables in one property (Maria D.)
- Added launch4j.tmpdir property.

#### Changes in version 2.1.2 (03-04-2006)

- Important bugfix: insufficient command line buffer size was increased to 32KB (found by Sebastian Kopsan).
- Added runtime JVM options from an .ini file.
- Launch4j's bin directory is now configurable through launch4j.bindir system property.

#### Changes in version 2.1.1 (25-01-2006)

- Fixed bug #1402748. Validation error occurred when using an Ant task with embedded config and dontWrapJar option (found by Chris Nokleberg).

#### Changes in version 2.1.0 (10-01-2006)

- More features and smaller header: 18 KB!!
- Added launcher mode, you can choose whether or not to wrap the jar.
- Spanish translation of the website/docs and program messages (Patricio Martínez Ros).
- JRE's bin directory is appended to the Path environment variable (Ianiv Schweber).
- Added special variables EXEDIR and EXEFILE that hold the executable's directory and full path.
- Support for mapping environment variables to system properties.
- Added debug launching mode - various information is displayed before starting the Java application.
- Fixed min/max JRE version checking, previous versions allowed these to be equal (found by Ryan).
- Bug fixed. Quotes in jar/JVM arguments were handled incorrectly (found by Juan Alvarez Ferrando).
- A few other enhancements.

#### Changes in version 2.0.0 (31-10-2005)

- Launch4j for Mac OS X is available thanks to Peter Centgraf.
- Added support for custom headers.
- Fixed bug #1343908, command line arguments with spaces were handled incorrectly by the console header (found by Oliver Schaefer / Steve Alberty).
- Fixed stdin redirection bug (found by Timo Santasalo).

#### Changes in version 2.0 RC3 (13-08-2005) - final RC

- Correct handling of pathnames with spaces.
- Fixed the '%20' pathname bug.
- Fixed basedir bug (Richard Xing).
- Splash screen can be closed when the application window becomes visible with out specifying it's title (Martin Busik). Update your config file: <waitForTitle>title</waitForTitle> is now <waitForWindow>true</waitForWindow>.
- Fixed build.bat files in demo directories.

#### Changes in version 2.0 RC2 (21-06-2005)

- chdir allows to change the current directory to arbitrary paths relative to the executable (FR #1144907). It's incompatible with previous versions, update your config file: <chdir>true</chdir> is now <chdir>.</chdir>.
- Bundled JRE path no longer depends on chdir function.
- Fixed Ant task bug, build files outside launch4j's directory wouldn't work. Josh Elsasser submitted a patch that works without setting launch4j's home dir in the build file. Thanks!
- Removed static edge from splash screen (Serge Baranov).
- Program checks that the output file path doesn't contain spaces.
- Fixed a NPE bug caused by a missing maxVersion property (found by Morgan Schweers).
- Fixed relative JRE path bug (found by Nili_).
- Cleaned up the Builder class.
- Fixed Ant task NPE where the config was entirely defined in the build file (Josh Elsasser).

#### Changes in version 2.0 RC (07-06-2005)

- Added an Ant task for better build integration.
- Added 2.x documentation.
- Updated the demo configuration files.
- Fixed issues with relative paths in the configuration.
- Removed the '-1' option in console mode.
- Minor fixes.

#### Changes in version 2.0 beta2 (23-05-2005)

- # comments are recognized when importing 1.x cfg files.
- Added version information.
- Resource file is displayed when a resource error occurs.
- Fixed a bug found by Max, options on the first tab were always enabled.

#### Changes in version 2.0 beta1 (13-05-2005)

- Completely new, cross-platform wrapper - create windows executables on Linux.
- New .xml configuration file.
- Application icon with multiple resolutions and color depths.
- Swing GUI interface.
- Header compiled with MinGW port of gcc instead of VC++.

#### Changes in version 1.4.2 (12-03-2005)

- Fixed bug #1158143, stayAlive without a splash screen caused an infinite loop (found by Gregory Kotsaftis).

#### Changes in version 1.4.1 (04-03-2005)

- Fixed bug #1119040, buffer for reading config properties was too short (found by Tom Jensen and Neil).
- Added configurable splash timeout (FR #1102951).
- Added option to disable the error message on splash timeout (FR #1109159).
- Option to keep the gui launcher 'alive' after starting an application (FR #1124653).
- Removed version info.
- 'waitfor' property is now optional.

#### Changes in version 1.4.0 (26-01-2005)

- Removed .lch4j suffix from process name, now it has the form of the executable filename. The temporary launchers are stored in launch4j-tmp directory (suggested by Emmanuel).
- Added support for console apps (FR #1050053).

#### Changes in version 1.3.1 (05-11-2004)

- Fixed a bug where explorer window was opened instead of launching the application when setProcName was set to false (found by Rob Jones).
- Fixed temporary launcher deletion bug.

#### Changes in version 1.3.0 (01-11-2004)

- Now you can configure launch4j to:
  - Use a bundled JRE.
  - Search for java, show an error message if the right version cannot be found and open the java download page.
  - And a feature you asked for: use bundled JRE, if that fails search for java and bring up the java download page on error.
- Enhanced code that sets the custom process name. In case launch4j can't refresh the temporary launcher, bundled JRE on a read only file system for example, it will use one created previously, if it's present and has the correct size. If not, launching will still continue, but with javaw.exe process name.Temporary launchers are now created in the jre directory instead of jre/bin.
- errTitle property allows to set the title of the error message box.

#### Changes in version 1.2.1 (25-09-2004)

- Bugfix that allows launching from command line using short name (#1026514 / found by Zach Del)

#### Changes in version 1.2.0 (10-09-2004)

- Custom process name (myapp.lch4j.exe)
- 9 KB stub!
- Jar arguments
- Bugfix that allows launching from command line.
- Hide splash on javaw error.
- Easier configuration with case insensitive parameters + show unrecognized parameter.
- 12 KB demo application, 34 KB with splash screen.
- Configuration parameter 'args' changed to 'jvmArgs'