Compiler vs. Interpreter

Source2code
Figure 1. Du source à l’exécution (source https://www.codewithc.com/difference-between-compiler-interpreter/)

Compiler c’est quoi?

Compil Java
Figure 2. Compilation Java (source ici)

!

Compil C++
Figure 3. compilation C++ (source ici)

Pourquoi compiler "à la main"?

Compiler "à la main"

% javac ...

Compiler intelligemment

% tree src                                         jmb@mbp-jmb
src
├── main
│   └── java
│     └── Main.java
└── test
    └── java

make

% make

makefile

Makefile
Figure 4. Exemple de Makefile

"Builder" son application

Outils de build

Exemple complet Maven

Code de départ :

Main.java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Compilation

% mvn clean package
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.613 s
[INFO] Finished at: 2021-09-19T12:02:00-04:00
[INFO] ------------------------------------------------------------------------

Exécution

Nous allons préciser à maven d’exécuter la classe Main.

Tip
Pour exécuter Maven en mode silencieux, utiliser l’option -q (quiet).
% mvn -q exec:java -Dexec.mainClass=Main
Hello World!

Pas de magie

   <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
            </plugin>
        </plugins>
    </build>

Détails

   <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>16</source>
                    <target>16</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

pom.xml

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.github.ace-lectures</groupId>
    <artifactId>re-21</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>RE 2021 tutorial</name>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        ...
    </build>

</project>

Utilisations

  • Génération de la javadoc

  • Génération du diagramme de classe

  • Lancement des tests

  • Pas que en ligne de commande

OK, mais si j’ai pas javac ?

⇒ GitHub CI

GitHub

Retour sur TD4 conception et futur TD4 Qualité…​

Ressources