Projets > Récupérer le code source d'un fichier compilé JAVA
Récupérer un environnement de développement Java à partir de fichiers compilés
Table des matières
- Première étape : Décompiler un fichier compilé .jar
- Deuxième étape : Organiser les sources
- Troisième étape : Compiler les sources du projet
- Quatrième étape : Produire un FAT JAR
- Liens externes et sujets connexes
Les projets présentés dans la section projets du site sont d'ordre personnel ou professionnel. Ils visent à décrire dans les grandes lignes la méthode utilisée pour résoudre une problématique. Ce ne sont pas des tutoriels détaillés. Toutefois, n'hésitez pas à me contacter par email, via le formulaire de contact ou sur mes réseaux sociaux si vous souhaitez des précisions sur les sujets abordés. Vous pouvez également vérifier s'ils ne figurent pas dans la section documentations.
Le projet provient initialement d'une problématique professionnelle. L'objectif est de comprendre comment décompiler un fichier .jar de type FAT JAR et le rendre à nouveau compilable dans un IDE. Je pars d'un fichier FAT JAR lisible. Il existe de nombreuses techniques pour protéger le code source après sa décompilation, comme l'obfuscation. Cette méthode peut rendre les sources inutilisables ou très difficiles à interpréter. Par exemple : Obfuscation du code source sur freelancerepublik. Dans ce cas, vous pourriez être dans l'impossibilité de récupérer les sources ou rencontrer de grandes difficultés à rendre le code à nouveau compréhensible.
Première étape : Décompiler un fichier compilé .jar
Plusieurs solutions existent pour décompiler des fichiers .jar. Pour ce projet, j'ai utilisé un script nommé Quiltflower En retraçant l'historique de ce projet, j'ai découvert qu'il s'appelle désormais GitHub Vineflower. Ma version s'exécute en ligne de commande, avec des paramètres pour définir le chemin des fichiers à décompiler et celui de destination.
Exemple :
- Script quiltflower
- Fichier à décompiler
- Exécution de la commande
- Dossier des fichiers décompilés
- Librairies décompilées
- Sources décompilées






Deuxième étape : Organiser les sources
Il existe plusieurs types de sources :
- Les sources provenant de librairies
- Les fichiers de configuration (variables d'environnement, mots de passe, pom.xml, gradle, etc.)
- Les sources du projet créées par les développeurs
a. Le fichier manifest.mf
Il faut d'abord rechercher le fichier manifest.mf pour y trouver la main-class et la version du JDK.
- La main-class correspond au fichier qui sera exécuté en premier lors de l'exécution de la commande
- La version du JDK permet d'éviter tout problème de compatibilité entre les bibliothèques


b. Création du projet

- Jaune : fichiers ressources
- Violet : librairies
- Vert : fichiers sources du projet
- Bleu : META-INF (uniquement utile pour les informations qu'il contient). Il n'est pas ajouté au nouveau projet
c. Trier et rassembler les sources
Créez un nouveau projet dans un IDE de votre choix. Pour ce projet, j'ai utilisé IntelliJ IDEA Community Edition.
- Assignez Maven comme gestionnaire de projet
- Sélectionnez le JDK approprié (par exemple, JDK 1.8 pour cet exemple)
- Remplacez et déposez les sources du projet et les fichiers deconfiguration dans le répertoire /src/java/main/ du nouveau projet
- Placez les dossiers ne contenant pas de fichiers .java dans le répertoire des ressources
- Identifiez, une à une, les librairies manquantes pour les réintégrer proprement dans le nouveau projet
- Dans meta-inf/maven/, vous pouvez retrouver le fichier pom.xml d'origine et y identifier les librairies nécessaires
- On positionne toutes les définitions dans notre nouveau pom.xml








Lors de chaque tentative de build du projet, les erreurs vous indiqueront les bibliothèques manquantes.
d. Récupération des librairies
Pour récupérer les librairies, on peut utiliser des sites internet spécialisés, comme : Maven central pour récupérer les librairies connus. Exemple avec Maven repository :
- Identifiez la librairie manquante dans les déclarations
- Effectuez une recherche Google
- Choisissez la version appropriée
- Copiez la déclaration dans le fichier pom.xml
- Compilez les sources avec la commande suivante :





bash
mvn clean install
Si une bibliothèque n'est pas présente sur Maven Central, vous pouvez utiliser des repositories comme JFrog Artifactory. Pour ajouter des bibliothèques depuis JFrog Artifactory, suivez leur documentation. Pour les bibliothèques téléchargées manuellement ou à conserver hors ligne, vous pouvez créer un repository local Maven. Consultez mon tutoriel : Comment créer un repository local avec Maven ?
Troisième étape : Compiler les sources du projet
a. Configuration de la variable path JAVA_HOME
Pour compiler le projet, assurez-vous que la version du JDK est active dans le projet et sur votre path JAVA_HOME. Cela garantit une version cohérente entre l'environnement de développement et les commandes en ligne de commande.
Assurez-vous d'avoir correctement configuré JAVA_HOME pour permettre l'exécution en terminal ou en fenêtre CMD.

b. Déboguer les sources
Une liste des problèmes rencontrés :
- Les variables ne sont plus nommées correctement
- Des caractères apparaissant de manière aléatoire
- Les chemins ne sont plus accessibles pour les images ou fichiers de configuration, car ils sont en absolu et non relatifs
- Les librairies ne sont pas déclarées dans le bon scope
- Les versions des librairies ne sont pas adaptées : trop avancées ou trop anciennes

Une fois que tout est débogué et que le projet compile correctement, il est possible de tester le projet directement depuis l'IDE ou en le recompilant au format FAT JAR. Ensuite, il faut vérifier que tout fonctionne comme prévu. Dans mon cas, j'ai dû passer par une seconde phase de débogage pour résoudre les derniers problèmes.
Conclusion
Le projet s'est terminé par la génération d'un FAT JAR (également appelé UBER JAR). Le passage au FAT JAR demande quelques connaissances, notamment pour bien comprendre la déclaration du build dans les fichiers assembly.xml. Voici les tutoriels qui m'ont aidé à configurer mon fichier FAT JAR :
C'est un long projet que de récupérer les sources complètes et de reconstruire un projet Java fonctionnel et éditable dans un IDE. Il est crucial de toujours disposer d'un code source à jour avec son exécutable, surtout lorsqu'on travaille avec des sous-traitants, afin d'éviter ce type de problème.
Je tiens à remercier Vincent F et Mitvailer pour leur aide précieuse en tant que mentors Java à des moments clés du projet. Sans eux, je n'aurais pas réussi ce projet à temps.