diff --git a/README.md b/README.md index d051e4a..0b068e3 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ -![Launch5j](etc/logo.png) - -**Java JAR wrapper for creating Windows native executables -created by LoRd_MuldeR <>** +--- +title: "![Launch5j](etc/img/logo.png)" +subtitle: "**Java JAR wrapper for creating Windows native executables**" +--- # Introduction **Launch5j** is a reimagination of “Launch4j”, *with full Unicode support*. This is a 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. The wrapper also provides better user experience through an application icon, a native pre-JRE splash screen, and a Java download page in case the appropriate JRE cannot be found. + # Usage There currently are two different ways to use Launch5j with your application code: @@ -34,6 +35,7 @@ There currently are two different ways to use Launch5j with your application cod **Warning:** Code signing, as with Microsoft®'s `SignTool`, probably does **not** work with the “wrapped” executable file! If code signing is a requirement, please use a *separate* JAR file and just sing the launcher executable. + # Variants Launch5j executables come in a number of variants, allowing you to pick the most suitable one for you project: @@ -59,13 +61,14 @@ All of the above Launch5j variants are available as `x86` (32-Bit) and `x64` (64 *Note:* Launch5j has been tested to work correctly on Windows XP (Service Pack 2), or a compatible newer version. + # Customizations Launch5j comes with a *default* executable icon and a *default* splash screen bitmap. These just server as an example and you probably want to replace them with your own *application-specific* graphics. It is ***not*** necessary to re-build the executable files for that purpose. Instead, you can simply use a resource editor, such as [**XN Resource Editor**](https://web.archive.org/web/20100419201225/http://www.wilsonc.demon.co.uk/d10resourceeditor.htm) ([mirror](https://stefansundin.github.io/xn_resource_editor/)) or [**Resource Hacker™**](http://www.angusj.com/resourcehacker/), to *modify* the pre-compiled executable files as needed: -![reshack](etc/reshacker-example.png) +![Resource Hacker](etc/img/reshacker-example.png) ## Additional options @@ -131,6 +134,7 @@ Some options can be configured via the launcher executable's [STRINGTABLE](https *Note:* We use the convention that the default resource string value `"?"` is used to represent an “undefined” value, because resource strings cannot be empty. You can replace the default value as needed! + # Unicode command-line arguments There is a *long-standing* bug in Java on the Windows™ platform, which causes *Unicode* command-line arguments to be “mangled”. Even if the Unicode command-line arguments are properly passed to the Java executable (`java.exe`), they are **not** passed trough correctly to the `main()` method of your Java program! This problem can be reproduced in *all* Java versions ranging from Java 7 (1.7) up to and including the latest Java 15, as of October 2020. @@ -164,15 +168,31 @@ public class YourMainClass { } ``` +***Example:*** + +![Unicode command-line arguments](etc/img/unicode-args.png) + ## The JAR file name Be aware that the same problem of “mangled” Unicode characters applies when the path of the JAR file is passed to the Java executable. In other words, the Java runtime *fails* to execute any JAR files whose path – file name or directory name anywhere in the path – contains any Unicode characters that cannot be represented in the computer's *local* ANSI codepage! Unfortunately, we can **not** encode the path of the JAR file as we do with the other command-line arguments, because the Jave executable requires the path of the JAR file to be passed in a non-encoded form. Therefore, it is recommended to ***only*** use ASCII characters in the name of your JAR file and in the “install” path !!! + +# Source code + +The source code of **Launch5j** is available from the official Git mirrors at: + +* `git clone https://github.com/lordmulder/Launch5j.git` + +* `git clone https://bitbucket.org/muldersoft/launch5j.git` + +* `git clone https://gitlab.com/lord_mulder/launch5j.git` + + # Build instructions -In order to build Launch5j from the sources, it is recommended to use the [*GNU C Compiler* (GCC)](https://gcc.gnu.org/) for Windows, as provided by the [*Mingw-w64*](http://mingw-w64.org/) project. Other C compilers may work, but are **not** officially supported. +In order to build **Launch5j** from the sources, it is recommended to use the [*GNU C Compiler* (GCC)](https://gcc.gnu.org/) for Windows, as provided by the [*Mingw-w64*](http://mingw-w64.org/) project. Other C compilers may work, but are **not** officially supported. Probably the most simple way to set up the required build environment is by installing the [**MSYS2**](https://www.msys2.org/) distribution, which includes *GCC* (Mingw-w64) as well as all the required build tools, such as *Bash* and *GNU make*. @@ -188,11 +208,20 @@ Once the build environment has been set up, just run the provided Makefile: *Note:* In order to create 32-Bit or 64-Bit binaries, use the `mingw32` or `mingw64` sub-system of MSYS2, respectively. + +# Contact + +**Launch5j** was created by LoRd_MuldeR <>. + +For help and support, please visit: + + # Acknowledgment This project is partly inspired by the “Launch4j” project, even though it has been re-written from scratch: + # License This work has been released under the MIT license: diff --git a/etc/logo.png b/etc/img/logo.png similarity index 100% rename from etc/logo.png rename to etc/img/logo.png diff --git a/etc/reshacker-example.png b/etc/img/reshacker-example.png similarity index 100% rename from etc/reshacker-example.png rename to etc/img/reshacker-example.png diff --git a/etc/img/unicode-args.png b/etc/img/unicode-args.png new file mode 100644 index 0000000..9c87bd2 Binary files /dev/null and b/etc/img/unicode-args.png differ diff --git a/package.cmd b/package.cmd index 66f2fd3..d38ad1e 100644 --- a/package.cmd +++ b/package.cmd @@ -1,6 +1,15 @@ @echo off +setlocal enabledelayedexpansion cd /d "%~dp0" +set "PANDOC_DIR=C:\Program Files (x86)\Pandoc" + +if not exist "%PANDOC_DIR%\pandoc.exe" ( + echo Pandoc not found. Please check PANDOC_DIR and try again^^! + pause + goto:eof +) + REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ REM Get current date REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -58,18 +67,22 @@ REM Copy binaries REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mkdir "%~dp0.\out\~package" -mkdir "%~dp0.\out\~package\example" -mkdir "%~dp0.\out\~package\x86" mkdir "%~dp0.\out\~package\x64" -copy /Y "%~dp0.\*.txt" "%~dp0.\out\~package" -copy /Y "%~dp0.\*.md" "%~dp0.\out\~package" - -copy /Y "%~dp0.\bin\launch5j_x86*.exe" "%~dp0.\out\~package\x86" +copy /Y "%~dp0.\bin\launch5j_x86*.exe" "%~dp0.\out\~package" copy /Y "%~dp0.\bin\launch5j_x64*.exe" "%~dp0.\out\~package\x64" -copy /Y /B "%~dp0.\bin\launch5j_x86_wrapped_registry.exe" + "%~dp0.\etc\example\dist\example.jar" "%~dp0.\out\~package\example\example.exe" -copy /Y "%~dp0.\etc\example\src\com\muldersoft\l5j\example\Main.java" "%~dp0.\out\~package\example\example.java" +mkdir "%~dp0.\out\~package\etc" +mkdir "%~dp0.\out\~package\etc\example" +mkdir "%~dp0.\out\~package\etc\img" + +copy /Y "%~dp0.\*.txt" "%~dp0.\out\~package" +copy /Y "%~dp0.\etc\img\*.png" "%~dp0.\out\~package\etc\img" + +copy /Y /B "%~dp0.\bin\launch5j_x86_wrapped_registry.exe" + "%~dp0.\etc\example\dist\example.jar" "%~dp0.\out\~package\etc\example\example.exe" +copy /Y "%~dp0.\etc\example\src\com\muldersoft\l5j\example\Main.java" "%~dp0.\out\~package\etc\example\example.java" + +"%PANDOC_DIR%\pandoc.exe" -f markdown-implicit_figures -t html -T "Launch5j" --toc "%~dp0.\README.md" > "%~dp0.\out\~package\README.html" attrib +R "%~dp0.\out\~package\*.*" /S diff --git a/res/common.rc b/res/common.rc index 9e05944..e085f31 100644 --- a/res/common.rc +++ b/res/common.rc @@ -49,8 +49,8 @@ END ///////////////////////////////////////////////////////////////////////////// VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,5,1,0 - PRODUCTVERSION 0,5,1,0 + FILEVERSION 0,6,0,0 + PRODUCTVERSION 0,6,0,0 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x3L @@ -67,8 +67,8 @@ BEGIN BEGIN VALUE "ProductName", "Launch5j" VALUE "FileDescription", "Launch5j" - VALUE "ProductVersion", "0.5.1" - VALUE "FileVersion", "0.5.1" + VALUE "ProductVersion", "0.6.0" + VALUE "FileVersion", "0.6.0" VALUE "InternalName", "Launch5j" VALUE "OriginalFilename", "launch5j.exe" VALUE "LegalCopyright", "Created by LoRd_MuldeR "