Cours BUT Info

TP 1 — Compilation + Git

Compiler du Java en console : dépendances, paquetages, archive jar — puis Git local avec gitk, diff et reset, et un premier dépôt GitLab avec .gitignore.

Objectif du TP : comprendre les mécanismes de compilation en Java pour paramétrer correctement son IDE, puis prendre en main Git en local avant de créer un dépôt GitLab. Console et éditeur de texte suffisent, sous n'importe quel OS. Règles de fond : une seule classe par fichier, un fichier du même nom que la classe, une typographie en CamelCase. Répertoire de base : dev-qu/compil_src, hors de votre projet devS2.

1. Sans dépendance, ni paquetage

La classe A porte un attribut label initialisé à "42", deux constructeurs, un toString qui renvoie le label, et un main créant et affichant a1 (par défaut) et a2 (label au choix) :

public class A {
    private String label = "42";
    public A() {}
    public A(String label) { this.label = label; }
    @Override public String toString() { return label; }
    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new A("au choix");
        System.out.println(a1 + " / " + a2);
    }
}

Q3 — depuis first/ : javac A.java puis java A ; le binaire naît à côté du source. Q4 — supprimez le binaire, replacez-vous dans compil_src : javac first/A.java compile pareil, mais l'exécution exige java -cp first A.

2. Avec dépendance, sans paquetage

Dans second/, copiez A sans son main et ajoutez la classe B fournie, dont le main crée et affiche un A. Q2 — depuis second/, javac B.java suffit : javac trouve et compile A au passage. Q4 — la compilation séparée :

javac -d bin second/A.java second/B.java   # les binaires vont dans bin/
java -cp bin B

L'option -d range les binaires dans bin/ au lieu de les semer à côté des sources.

3. Avec paquetage : la hiérarchie des répertoires

Dans third/, la classe A déclare package third;. Q3 — compilez depuis compil_src sans compilation séparée, puis exécutez : que se passe-t-il ? Le paquetage change tout : la classe ne s'exécute plus sous son simple nom — son nom pleinement qualifié est third.A — et le classpath doit pointer vers le répertoire qui contient third/, pas vers third/ lui-même. Q4 — avec la compilation séparée, le binaire est généré dans bin/third/A.class : javac -d bin recrée l'arborescence des paquetages. Q5 — la commande :

java -cp bin third.A

4. Avec dépendance, avec paquetage

Copiez second/A.java dans fourth/ en adaptant son paquetage, compilez dans bin. Copiez second/B.java dans fifth/, adaptez sa déclaration et ajoutez l'import vers le paquetage fourth. Exécutez B depuis compil_src :

javac -d bin fourth/A.java fifth/B.java
java -cp bin fifth.B

Réflexe à installer : classpath = racine des paquetages, classe = nom pleinement qualifié.

5. Un petit contrôle : bin + jar

Supprimez les binaires de bin, récupérez sur Moodle des sources A, B, C à intégrer selon leurs déclarations de paquetage, et une archive jar décrivant une classe D — méthode getSomeText(), paquetage controlpkg1. Écrivez dans compil_src une classe Main créant et affichant une instance de chacun, puis compilez et exécutez sans quitter ce répertoire. Le classpath combine binaires et archive :

javac -cp bin:<archive>.jar Main.java
java -cp .:bin:<archive>.jar Main

Le classpath est une liste

Répertoires et archives, séparés par : sous Unix (; sous Windows). Pour compiler comme pour exécuter, il faut tout ce que le code touche : bin pour A, B, C, le jar pour D.

6. Git local : commits, renommages et diff

Dans dev-qu/git_test, initialisez un dépôt (git init), créez first.txt, indexez-le, commitez « premier commit ». Lancez gitk en tâche de fond (F5 pour rafraîchir). Enchaînez : modification et « second commit » ; git mv first.txt first_alt.txt (consultez l'aide de la commande, vérifiez avec git status) et « renommage » ; suppression et « suppression fichier » ; création de one et second, remplis des chiffres impairs pour l'un, des autres pour l'autre. Ajoutez uniquement one à l'index, puis confrontez les trois comparaisons :

git diff             # index ↔ répertoire de travail
git diff --staged    # dernier commit ↔ index
git diff HEAD        # dernier commit ↔ répertoire de travail

Avec one indexé et second modifié mais non indexé : git diff montre l'index contre le répertoire de travail ; git diff --staged, le dernier commit contre l'index — exactement ce qui sera commité ; git diff HEAD, le dernier commit contre le répertoire de travail — tout, indexé ou non.

Terminez par git reset (annule l'index) puis git reset --hard (annule les modifications depuis la dernière version enregistrée à l'historique).

git reset --hard est destructeur

Il écrase la copie de travail pour revenir au dernier commit : les modifications non commitées sont perdues. On vérifie son git status deux fois.

7. Le dépôt GitLab

Créer le projet. Connectez-vous sur http://gitlab.univ-lille.fr, « New Project », nommez-le dev-oo, paramétrage par défaut. Vous pourrez ensuite travailler depuis GitLab, cloner puis pousser, ou déposer directement un répertoire existant.

Configurer Git. git config --global user.name "<prénom> <nom>" puis git config --global user.email "<email>".

Cloner et ignorer. Clonez le dépôt à côté de votre devS2, créez un .gitignore excluant ce qui se génère (documentation, fichiers binaires), ajoutez-le à l'index, commitez en « commit initial : gitignore » et poussez.

Importer vos TP. Copiez le contenu de devS2 dans dev-oo, ajoutez tout à l'index, commitez en « commit initial », poussez, puis vérifiez directement sur GitLab que les modifications sont bien intégrées.

Si tout s'est bien passé, devS2 devient inutile : vous ne travaillez plus qu'à partir de dev-oo.


tpQU_01.pdf

R2.03 · TP 1 — Compilation + Git · 4 pages

Consultation seule — téléchargement désactivé

Chargement du document…

Dernière mise à jour le

Sur cette page