154 votes

Pourquoi personne n'utilise make for Java?

Juste au sujet de chaque projet Java que j'ai vu soit utilise Maven ou Ant. Ils sont beaux outils et je pense que juste au sujet de tout projet de pouvoir les utiliser. Mais qu'est-il arrivé à faire? Il est utilisé pour une variété de non-projets Java et peut facilement manipuler Java. Assurez-vous d'avoir à le télécharger make.exe si vous utilisez Windows, mais Ant et Maven n'est pas fourni avec le JDK.

Est-il un vice fondamental de faire lorsqu'il est utilisé avec Java? Est-ce juste parce que Ant et Maven sont écrits en Java?

183voto

Will Hartung Points 57465

La question fondamentale à Faire et Java, c'est que Faire des travaux sur la prémisse que vous devez spécifier une dépendance, et ensuite une règle pour résoudre cette dépendance.

Avec C de base, qui sont généralement "convertir un principal.c fichier principal.o fichier, lancez "cc main.c".

Vous pouvez le faire en java, mais vous apprendrez rapidement quelque chose.

Surtout que le compilateur javac est lent à démarrer.

La différence entre:

javac Main.java
javac This.java
javac That.java
javac Other.java

et

javac Main.java This.java That.java Other.java

est le jour et la nuit.

Aggravent la situation avec des centaines de classes, et ça devient intenable.

Ensuite, vous combinez cela avec le fait que java a tendance à être organisés sous forme de groupes de fichiers dans les répertoires, vs C et d'autres qui tendent vers une structure plus horizontale. N'ont pas beaucoup de soutien direct à l'utilisation de hiérarchies de fichiers.

Faire n'est pas très bon à déterminer quels fichiers sont à jour, au niveau de la collection.

Avec Ant, il faudra passer par le et la somme de tous les fichiers qui ne sont pas à jour, puis de les compiler en une seule fois. Font, il suffit d'appeler le compilateur java sur chaque compilateur. Avoir faire PAS faire, il faut suffisamment externe de l'outillage pour vraiment montrer que Faire n'est pas tout à fait à la hauteur.

C'est pourquoi des alternatives comme Ant et Maven rose.

32voto

Greg Hewgill Points 356191

Le vénérable make programme gère séparément les langages compilés comme le C et le C++ raisonnablement bien. Vous compiler un module, il utilise des #include de tirer dans le texte d'inclure d'autres fichiers, et écrit un objet unique fichier de sortie. Le compilateur est très bien un un-à-un-temps du système, avec une autre étape de liaison pour lier l'objet des fichiers dans un fichier binaire exécutable.

Toutefois, en Java, le compilateur a fait à compiler d'autres classes que vous importez avec import. Bien qu'il serait possible d'écrire quelque chose qui a généré toutes les dépendances à partir du code source Java, de sorte qu' make serait de construire des classes dans le bon ordre un à la fois, ce n'est pas de s'occuper des cas comme des dépendances circulaires.

Le compilateur Java peut aussi être plus efficace par la mise en cache de la compilation des résultats des autres classes lors de la compilation d'autres classes qui dépendent les résultats de celles déjà compilé. Cette sorte de dépendance automatique à l'évaluation n'est pas vraiment possible avec make seulement.

28voto

Hank Gay Points 36173

La question se fonde sur une hypothèse erronée: un nombre non négligeable de développeurs n'utiliser make . Voir Outils de génération Java: Ant vs. Maven . Quant à savoir pourquoi un développeur n'utiliserait pas make : de nombreux développeurs n'ont jamais utilisé make , ou l'ont utilisé et l'ont détesté avec un feu plus brûlant que mille soleils. En tant que tels, ils utilisent des outils alternatifs.

22voto

user1251840 Points 49

En fait, make peut gérer la recompilation en une seule commande de tous les fichiers Java obsolètes. Modifiez la première ligne si vous ne souhaitez pas compiler tous les fichiers du répertoire ou si vous souhaitez un ordre spécifique ...

 JAVA_FILES:=$(wildcard *.java)
#
# the rest is independent of the directory
#
JAVA_CLASSES:=$(patsubst %.java,%.class,$(JAVA_FILES))

.PHONY: classes
LIST:=

classes: $(JAVA_CLASSES)
        if [ ! -z "$(LIST)" ] ; then \
                javac $(LIST) ; \
        fi

$(JAVA_CLASSES) : %.class : %.java
        $(eval LIST+=$$<)
 

17voto

Yar Points 25421

Toutes les autres réponses au sujet de la qualité technique de chaque sont remplies. Ant et Maven peuvent être mieux adaptés à Java que de faire, ou de Hank Gay points, ils ne peuvent pas :)

Cependant, vous avez demandé si elle les questions qui Ant et Maven sont écrits en Java. Bien que sur StackOverflow nous ne tenons pas compte de telles pensées (fermé! non-reliés à la programmation! etc.), BIEN SÛR, C'EST UNE PARTIE DE LA CHOSE. Sur les rails de nous utiliser un Râteau, C mecs utilisation en font, et en Java, nous utilisons Ant et Maven. S'il est vrai que l'Ant ou Maven développeurs vont s'occuper de le développeur Java peut-être mieux que d'autres, il y a aussi une autre question: que pensez-vous écrire des tâches Ant? Java. Si vous êtes un développeur Java, c'est un ajustement facile.

Donc oui, elle est en partie à l'utilisation d'outils écrits dans la langue que vous l'outillage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X