==== Paramètres du projet ==== APP_NAME := papillon MAIN_CLASS := fr.iutfbleau.papillon.Start # <-- change si ton main est ailleurs SRC_DIR := src BUILD_DIR:= build DIST_DIR := dist RES_DIR := res LIB_DIR := lib Driver MariaDB DRIVER_JAR := $(LIB_DIR)/mariadb Séparateur de classpath selon OS ifeq ($(OS),Windows_NT) SEP := ; else SEP := : endif Liste des sources et classes correspondantes SOURCES := $(shell find $(SRC_DIR) -name ".java") CLASSES := $(SOURCES:$(SRC_DIR)/%.java=$(BUILD_DIR)/%.class) ==== Règles ==== .PHONY: all compile jar run run-jar clean rebuild all: compile $(BUILD_DIR): @mkdir -p $(BUILD_DIR) $(DIST_DIR): @mkdir -p $(DIST_DIR) Compilation de chaque .java vers build/ en respectant les packages $(BUILD_DIR)/%.class: $(SRC_DIR)/%.java | $(BUILD_DIR) @mkdir -p $(dir $@) javac -classpath "$(DRIVER_JAR)" -d $(BUILD_DIR) $< Compile tout + copie des ressources si dossier res/ existe compile: $(CLASSES) @if [ -d "$(RES_DIR)" ]; then \ echo "Copie des ressources..."; \ cp -r $(RES_DIR)/ $(BUILD_DIR)/; \ fi @echo "==> Compilation OK" MANIFEST avec Main-Class et Class-Path (référence le driver) MANIFEST.MF: @echo "Manifest-Version: 1.0" > MANIFEST.MF @echo "Main-Class: $(MAIN_CLASS)" >> MANIFEST.MF @echo "Class-Path: ../$(DRIVER_JAR)" >> MANIFEST.MF Construction du JAR jar: compile MANIFEST.MF | $(DIST_DIR) jar cfm $(DIST_DIR)/$(APP_NAME).jar MANIFEST.MF -C $(BUILD_DIR) . @echo "==> JAR créé: $(DIST_DIR)/$(APP_NAME).jar" Exécution directe depuis build/ + driver sur le classpath run: compile java -classpath "$(BUILD_DIR)$(SEP)$(DRIVER_JAR)" $(MAIN_CLASS) Exécution du .jar (le MANIFEST référence le driver dans lib/) run-jar: jar java -jar "$(DIST_DIR)/$(APP_NAME).jar" clean: rm -rf $(BUILD_DIR) $(DIST_DIR) MANIFEST.MF rebuild: clean all doc: javadoc -d doc/ src/*.java