[English]
A small, cross-platform launcher written in C that automatically executes a JAR (Java archive file) with the same name as the launcher's executable.
The goal is to distribute a Java application as a native executable (.exe on Windows or a Linux binary), without requiring the user to manually enter the command:
java -jar application.jarThe launcher automatically reconstructs the name of the associated .jar file and passes the command-line arguments to Java.
[French]
Petit lanceur multiplateforme écrit en langage C permettant d'exécuter automatiquement un fichier JAR (Java archive file) portant le même nom que l'exécutable du lanceur.
L'objectif est de pouvoir distribuer une application Java sous la forme d'un exécutable natif (.exe sous Windows ou binaire Linux), sans demander à l'utilisateur de saisir manuellement la commande :
java -jar application.jarLe lanceur reconstruit automatiquement le nom du fichier .jar associé et transmet les arguments de la ligne de commande à Java.
- Support Windows et Linux.
- Aucun script intermédiaire nécessaire.
- Transmission des arguments de la ligne de commande.
- Utilisation des API natives du système :
execvp()sous Linux ;CreateProcess()sous Windows.
- Pas d'utilisation de
system(), évitant les problèmes liés au shell. - Code source écrit en C portable.
Pour l'exécutable Windows, vous pouvez ajouter des ressources à votre fichier.
Un exemple de fichier resources.res est inclus dans la liste des fichiers de ce projet.
Pour vous aider à créer un fichier icone, il existe des utilitaires en ligne comme celui-là :
-
convertion d'un fichier PNG en fichier ICO au format Windows (16x16, 32x32, ou autes):
https://pngtoicon.com/ -
IcoFX - un éditeur de fichier
*.icoplus complet permettant toutes les conversions
https://www.icofx.ro/
Souvent un fichier .ico de taille 32x32 pixels, en 256 couleurs, est suffisant. Sa taille mémoire réduite de 2.2Ko fera un exécutable Windows compact.
Pour modifier l'exécutable et ajouter les ressources, vous pouvez utiliser l'utilitaire :
Il importera le fichier resources.res et l'intégrera dans l'exécutable.
Si l'exécutable s'appelle :
mon_application
le lanceur recherche :
mon_application.jar
et exécute :
java -jar mon_application.jarSi l'exécutable s'appelle :
mon_application.exe
le lanceur recherche :
mon_application.jar
et exécute :
java.exe -jar mon_application.jarLes arguments fournis au lanceur sont automatiquement transmis à l'application Java.
Exemple :
mon_application fichier.txt --mode=testdevient :
java -jar mon_application.jar fichier.txt --mode=testPrérequis
- Compilateur C compatible GCC.
- Code::Blocks (optionnel).
- Java installé sur la machine cible.
Compilation Linux
Avec GCC :
gcc main.c -o jar_launcherExemple :
jar_launcher
jar_launcher.jar
Les deux fichiers doivent être dans le même répertoire.
Compilation Windows
Avec MinGW :
gcc main.c -o jar_launcher.exeExemple :
jar_launcher.exe
jar_launcher.jar
Sans argument
Linux :
./mon_programmeLance :
java -jar mon_programme.jarWindows :
mon_programme.exeLance :
java.exe -jar mon_programme.jarAvec arguments
Exemple :
./mon_programme config.xmlLance :
java -jar mon_programme.jar config.xmlLes espaces dans les arguments sont pris en charge.
Exemple :
./mon_programme "Mon fichier.txt"devient :
java -jar mon_programme.jar "Mon fichier.txt"La fonction build_jar_name() construit le nom du fichier JAR associé à l'exécutable.
Exemples :
application.exe
devient :
application.jar
Fonction spécifique Windows jl_exec_windows() utilisant :
CreateProcess()pour lancer Java.
Le lancement utilise :
fork()
execvp()
waitpid()Le processus fils est remplacé par la machine virtuelle Java.
Une première version du programme utilisait :
system("java -jar application.jar");Cette approche présente plusieurs inconvénients :
- dépendance au shell du système ;
- gestion complexe des guillemets ;
- risques d'injection de commandes ;
- différences de comportement entre Windows et Linux.
Le programme utilise maintenant les API natives du système pour lancer Java directement.
| Système | Méthode utilisée |
|---|---|
| Linux | fork() + execvp() |
| Windows | CreateProcess() |
Compilateurs testés :
- GCC
- MinGW
- Code::Blocks
Java doit être accessible
Le lanceur suppose que Java est accessible dans le PATH.
Vérification :
Linux :
java -versionWindows :
java -versionFichier JAR obligatoire
L'exécutable doit avoir un fichier .jar correspondant :
programme.exe
programme.jar
ou :
programme
programme.jar
Arguments Windows complexes
Les arguments contenant des caractères spéciaux Windows (", &, |, etc.) peuvent nécessiter un échappement particulier.
Les cas courants avec des chemins contenant des espaces sont supportés.
Auteur: Eric Normandin
Date : 2024-2026
Ce code source est sous licence MIT.
[French - License]
La permission est accordée par la présente, à titre gratuit, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), de traiter le Logiciel sans restriction, y compris, sans limitation, les droits d’utiliser, de copier, de modifier, de fusionner, de publier, de distribuer, de concéder en sous-licence et/ou de vendre des copies du Logiciel, et de permettre aux personnes auxquelles le Logiciel est fourni de faire de même, sous réserve des conditions suivantes :
La présente mention de droit d'auteur et la présente mention d'autorisation doivent être incluses dans toutes les copies ou parties substantielles du Logiciel.
LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, MAIS SANS S'Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN AUCUN CAS, LES AUTEURS OU LES TITULAIRES DE DROITS D'AUTEUR NE SAURAIENT ÊTRE TENUS RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D'UN CONTRAT, D'UN DÉLIT OU AUTRE, DÉCOULANT DU LOGICIEL, DE SON UTILISATION OU DE TOUTE AUTRE TRANSACTION RELATIVE À CE LOGICIEL.
[English - License]
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.