![]() | Combien d'entre vous les programmeurs Java ont eu des problèmes pour compiler des programmes? bibliothèques de dollars sur CLASSPATH paramètres kilométrage, à passer au compilateur Java. Même en utilisant les outils de développement pour Java, la situation ne s'améliore pas beaucoup. Nous passons beaucoup de temps pour mettre paramteri et chaque fois que nous lançons la compilation est toujours manquer quelque chose! |
Vous pouvez éviter tous ces problèmes simplement en organisant la source Java et utilisant un Makefile écrit ad hoc.
Qu'est-ce qu'un Makefile
Un makefile est un fichier qui décrit les étapes à efftuare pour accéder aux fichiers que nous obtiendrions l'arbre et toutes ses dépendances. Il est largement utilisé dans les plates-formes Unix et peut être utilisé pour construire tout type de programme. L'utilitaire make interprète le makefile et compiler le code source des programmes exécutables et des bibliothèques.
Avantages de l'utilisation de make
Beaucoup d'entre vous seront sceptiques de l'aide d'un makefile pour chaque projet Java pour la simple raison que le makefile doit spécifier les dépendances entre les fichiers, il ne sera sûrement changer de projet en projet. Donc, nous devrions écrire un makefile différent pour chaque projet. Cette limitation peut être surmontée en écrivant un makefile générique et peut être calculé toutes les dépendances pour que le projet soit terminé afin d'utiliser le même script pour tous les projets sans rien moficare dans le makefile.
Un avantage certes pas négligeable, c'est la capacité à faire pour remplir seul le nécessaire. Ainsi évite compiare de ce qui est déjà terminé et n'a pas été modifié avec un gain de temps considérable.
Avec un seul makefile permet de compiler toutes les sources du projet.
Comment faire pour utiliser
Le makefile, j'ai écrit à compiler des projets Java peut être utilisé sans modification pour des projets qui ont une structure de répertoire certaine. La source Java doit avoir un répertoire pour. Java, une pour les fichiers. Classe, et un pot pour les bibliothèques.
Tels que:
| - Src | `- Main | | - Java | | `- Com | | `- Exemple | | | - ExampleA.java | | | - ExampleB.java | | `- ExampleC.java | `- Ressources | `- Res.java | - Classes | - Libs | | - Général | | | - Base de données | | | | - DB1.jar | | | `- DB2.jar | `- Connexion | `- Log.jar | - Jars
Pour l'utiliser, puis écrivez simplement le code ci-dessous dans le fichier Makefile dans le répertoire racine du projet, vérifiez que le nom du répertoire est spécifié dans le fichier (pour les classes de classe;.. Src pour Libs pour java et jar) et de lancer le commander make
c'est tout. Si nous voulons un bocal contenant l'ensemble du projet il suffit d'exécuter make && make jar
Makefile
# # Makefile # Auteur: Danilo Abbasciano # # Mettre ici les répertoires pour les classes et les sources = Classes CLASS_DIR Src = REP_SOURCE JARS_DIR = Une pots find $ ( SOURCE_DIR ) - name "*.java" - printf % h\\n | sort | uniq | sed 's/$(SOURCE_DIR) \/ \? //' ) SUBDIRS: = $ (shell find $ (REP_SOURCE) - name "* Java." -% Printf h \ \ n | sort | uniq | sed 's / $ (REP_SOURCE) \ / \ / /?') local / java / bin JAVA_HOME = / usr / local / java / bin # Compilateur domaine # JDEBUGFLAGS =-g-dévalorisation # JDEBUGFLAGS =-O-dépendent-nowarn ) / javac CCM = $ (JAVA_HOME) / javac clean classes compile jar Phony.: Les classes propres jar compilation à: SUBDIRS ) ; do \ @ @ Pour p dans $ (SUBDIRS); faire \ echo 'compilation'; \ Exporter subdir = "/> p, \ print - directory compile ; \ faire - pas - print - répertoire de compilation, \ fait nettoyer: f * ~ *. class *. bak $ ( foreach dir ,$ ( SUBDIRS ) ,$ ( CLASS_DIR ) /$ ( dir ) /*. class ) - Rm - f * ~ * Classe Bak $ (foreach dir, $ (SUBDIRS) $ (CLASS_DIR) / $ (dir) / * Classe.).. ) /$ ( SUBDIR ) LOCAL_CLASS_DIR = $ (CLASS_DIR) / $ (sous-répertoire) ) /$ ( SUBDIR ) LOCAL_SOURCE_DIR = $ (REP_SOURCE) / $ (sous-répertoire) jar: ) ; jar - cf ../$ ( JARS_DIR ) / project . jar * cd $ (CLASS_DIR) pot - cf .. / $ (JARS_DIR) / projet pot *. compilation: les classes # Créer la classe cible dir s'il n'est pas présent. ) : $ (LOCAL_CLASS_DIR): LOCAL_CLASS_DIR ) mkdir - p $ (LOCAL_CLASS_DIR) # Nouvelle règle pour java Suffixes:. java . class . Suffixes:.. Java Class # Cette commande magique raconte faire pour trouver les fichiers de classe dans un autre répertoire class $ ( LOCAL_CLASS_DIR ) VPath%. classe $ (LOCAL_CLASS_DIR) java $ ( LOCAL_SOURCE_DIR ) VPath%. java $ (LOCAL_SOURCE_DIR) # Classpath, tous les bocaux / po et. / Libs ) :$ ( SOURCE_DIR ) :$ ( subst . jar ,. jar :,$ ( wildcard libs /*. jar libs /*/*. jar libs /*/*/*. jar jars /*. jar ) ) LIBCLASSPATH: = $ (CLASS_DIR): $ (REP_SOURCE): $ (subst. Jar Jar:., $ (Libs génériques / * libs JAR / * / * Jar libs / * / * / * / * Jar bocaux... . jar)) # Commande compil class : .. Java Class: ) $ ( JCC ) - nowarn - d $ ( CLASS_DIR ) $ ( JDEBUGFLAGS ) $< CLASSPATH = $ (LIBCLASSPATH) $ (JCC) - nowarn - d $ (CLASS_DIR) $ (JDEBUGFLAGS) <$ # Trouver les fichiers cibles $ ( LOCAL_SOURCE_DIR ) /*. java ) PATHFILES = $ (wildcard $ (LOCAL_SOURCE_DIR) / *. Java) $ ( LOCAL_SOURCE_DIR ) /,,$ ( PATHFILES ) ) FILES = $ (subst $ (LOCAL_SOURCE_DIR) /,, $ (PATHFILES)) java =. class ) classes: $ (FILES:.. = classe java)
Bonne compilation.





Je préfère de beaucoup de fourmis!
Vous devriez l'essayer ...