Construction ou compilation (Java)

138

Pensant que la réponse à cela est assez évidente, mais la voici:

Quand je travaille sur un petit projet pour l'école (en java) je le compile .

Sur ma coopérative, nous utilisons des fourmis pour construire notre projet.

Je pense que la compilation est un sous-ensemble de la construction. Est-ce correct? Quelle est la différence entre la construction et la compilation?

En relation:
Quelle est la différence entre la compilation et la construction?

soixantefootersdude
la source

Réponses:

229

Le "Build" est un processus qui couvre toutes les étapes nécessaires pour créer un "livrable" de votre logiciel. Dans le monde Java, cela comprend généralement:

  1. Générer des sources (parfois).
  2. Compilation des sources.
  3. Compilation des sources de test.
  4. Exécution de tests (tests unitaires, tests d'intégration, etc.).
  5. Emballage (en pot, guerre, ejb-jar, oreille).
  6. Exécution de vérifications de l'état (analyseurs statiques comme Checkstyle, Findbugs, PMD, couverture de test, etc.).
  7. Générer des rapports.

Donc, comme vous pouvez le voir, la compilation n'est qu'une (petite) partie de la construction (et la meilleure pratique consiste à automatiser entièrement toutes les étapes avec des outils comme Maven ou Ant et à exécuter la compilation en continu, ce qui est connu sous le nom d' intégration continue ).

Pascal Thivent
la source
2
Pourquoi l'appeler «intégration continue» au lieu de «construction continue»?
Quazi Irfan
@Pascal, Re "exécuter la construction en continu" .. "la construction " fait référence?
Pacerier
4
@Pacerier "la construction" fait référence à toutes les étapes 1.-7 .; «continuellement» ne signifie pas que vous démarrez la prochaine compilation immédiatement après la fin de la première, mais uniquement sur les changements dans le projet.
michelek
et quand il génère des sources comme vous le mentionnez au 1er point (Générer des sources (parfois).)
Deepak Gupta
42

Certaines des réponses que je vois ici sont hors contexte et ont plus de sens s'il s'agissait d'une question C / C ++.

Version courte:

  • "Compiler" transforme les fichiers .java en fichiers .class
  • «Construire» est un terme générique qui inclut la compilation et d'autres tâches.

«Bâtiment» est un terme générique qui décrit l’ ensemble processus qui comprend la compilation. Par exemple, le processus de construction peut inclure des outils qui génèrent du code Java ou des fichiers de documentation.

Il y aura souvent des phases supplémentaires, comme "package" qui prend tous vos fichiers .class et les met dans un .jar, ou "clean" qui nettoie les fichiers .class et les répertoires temporaires.

Darien
la source
32

La compilation consiste à transformer le code source en code objet.

La liaison est l'acte de combiner du code objet avec des bibliothèques dans un exécutable brut.

La construction est la séquence composée de la compilation et de la liaison , avec éventuellement d'autres tâches telles que la création de l'installateur.

De nombreux compilateurs gèrent automatiquement l'étape de liaison après la compilation du code source.

Quelle est la différence entre le code de compilation et le code exécutable?

Kaili
la source
Quelques autres tâches possibles: amélioration (JDO), Javadoc-ing, empaquetage et signature. En outre, certains environnements incluent l'exécution de tests unitaires / de régression automatisés dans le cadre d'une «construction».
Bert F
Normalement, il n'y a pas d'étape de liaison lors de la construction de projets Java et aucun exécutable brut n'est produit. Au contraire, les classes compilées sont regroupées dans un fichier .jar dans le cadre de la construction. (Ou .war, ou .ear, selon votre environnement cible.)
markusk
1
que sont les "exécutables bruts"?
ealeon
Le sac de bits qui est fondamentalement inutile en soi sans être mélangé avec les autres bibliothèques dont il a besoin. C'est un peu comme un gâteau au chocolat. Sans la farine et les œufs, etc., le cacao n'est que du cacao cru.
Kaili
9

En mots simples

La compilation traduit le code java (lisible par l'homme) en bytecode, afin que la machine virtuelle le comprenne.

Building rassemble toutes les parties compilées et crée (construit) un exécutable.

À M
la source
Ce dont vous parlez est "Interprétation" ... la compilation transforme le code lisible par l'homme en code machine
mortsahl
@Tom, vous voulez dire un "exécutable" ou un " exécutable jar "?
Pacerier
4

En fait, vous faites la même chose. Ant est un système de construction basé sur des fichiers de configuration XML qui peuvent effectuer un large éventail de tâches liées à la compilation de logiciels. Compiler votre code java n'est qu'une de ces tâches. Il y en a beaucoup d'autres, comme la copie de fichiers, la configuration de serveurs, l'assemblage de zips et de jars et la compilation d'autres langages tels que C.

Vous n'avez pas besoin d'Ant pour compiler votre logiciel. Vous pouvez le faire manuellement comme vous le faites à l'école. Une autre alternative à Ant est un produit appelé Maven. Ant et Maven font la même chose, mais de manière assez différente.

Recherchez Ant et Maven pour plus de détails.

Drekka
la source
Vous pouvez également voir ce que fait ant en regardant le fichier de construction (probablement appelé build.xml). Même si vous n'êtes pas familier avec la syntaxe, vous pouvez en quelque sorte voir ce qui se passe. <javac> signifie qu'il compile du code Java. <java> signifie qu'il exécute en fait le code compilé. Il s'agit probablement de créer un répertoire dans lequel placer les fichiers .class, de compiler le code, peut-être de créer du Javadoc, etc.
MatrixFrog
4
  • Build est une version compilée d'un programme.
  • Compiler signifie convertir (un programme) en un code machine ou une forme de niveau inférieur dans laquelle le programme peut être exécuté.

En Java : Build is a Life cycle contient une séquence de phases nommées.

par exemple: maven il a trois cycles de vie de build, le suivant est le defaultcycle de vie de build.

validate - validate the project is correct and all necessary information is available
compile - compile the source code of the project
test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
package - take the compiled code and package it in its distributable format, such as a JAR.
integration-test - process and deploy the package if necessary into an environment where integration tests can be run
verify - run any checks to verify the package is valid and meets quality criteria
install - install the package into the local repository, for use as a dependency in other projects locally
deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.
Premraj
la source
1

Dans Eclipse et IntelliJ, le processus de construction comprend les étapes suivantes: nettoyage des packages précédents, validation, compilation, test, package,
intégration, vérification, installation, déploiement.

Sam
la source
0

La compilation consiste simplement à convertir le code source en binaire, la construction consiste à compiler et à lier tous les autres fichiers nécessaires dans le répertoire de construction

patrick-fitzgerald
la source