Mes premiers pas en java

les outils de base

Avec le sdk de nombreux outils sont installés ... mais il en existe des plus importants que d’autres:

  • java: permet de lancer un programme java compilé
  • javac: permet de compiler un programme java
  • jar: permet de créer et de lancer une archive java

Note

Eclipse n’est pas indispensable pour faire du java ... vim reste imbattable à mon goût

Il est intérressant d’avoir dans son environnemnt la vatiable JAVA_HOME

Hello World

Allez on se lance avec un fichier hello.java

public class test {

        public static void main(String[] args) {
                System.out.println("hello world");
        }
}

d’accord j’ai un programme java mais maintenant je fais quoi?

  • je compile
javac hello.java
  • j’execute
java hello
> hello world

Il ne me reste plus qu’a envoyer mon fichier hello.class a mes utilisateurs.

Note

avec java et javac on peut utiliser des librairies externes en utilisant la notion de classpath (-cp ou directement via la variable système classpath)

Hello World avec des classes

Et si on réalisait le même exercice avec des classes (ne juger pas l’intérêt de cette exercice).

Nous réalisons deux classes:

  • Test
  • MyHello

Test.java

public class Test {

    public static void main(String[] args) {
        MyHello m;
        m = new MyHello();
        System.out.println(m.getText("fred"));
    }
}

MyHello.java

public class MyHello {

    private String x = "hello ";

    public String getText(String name) {
        String s = x + name;
        return s;
    }
}
  • je compile
javac MyHello.java Test.java
  • j’execute
java test
> hello fred

Super Il ne me reste plus qu’a envoyer mon fichier MyHello.class , Test.class a mes utilisateurs ... vous commencez à comprendre le problème.

Il existe une solution pour déployer un programme java: utiliser un fichier jar. Un fichier jar n’est qu’un fichier compréssé contenant:

  • nos fichiers class
  • les librairies exterieures nécessaire
  • un fichier MANIFEST.MF: contenant notamement le nom de la class à lancer

Dans notre cas nous allons créer un fichier infos.txt contenant des lignes à ajouter dans le MANIFEST.MF

Main-Class: Test

Nous allons maintenant compiler nos class et créer notre jar

javac *.java
jar cfm test.jar infos.txt *.class

Testons notre jar

java -jar test.jar
> hello fred

Introduction au package

Nous avons maintenant 2 classes qui sont au même niveau et dans aucun package. Un package permet:

  • de classer nos classes (utile pour les regrouper avec un sens)
  • de gérer ce qui peut être utilisé dans un autre package

Imaginons que nous souhaitons obtenir un package level décrit ainsi:

infos.txt
level
 |__ Test.java
 [__ sublevel
        |__ MyHello.java

Il faut modifier

infos.txt

Main-Class: level.Test

Test.java

package level;
import level.sublevel.*;

public class Test {

    public static void main(String[] args) {
        MyHello m;
        m = new MyHello();
        System.out.println(m.getText("fred"));
    }
}

MyHello.java

package level.sublevel;

public class MyHello {

    private String x = "hello ";

    public String getText(String name) {
        String s = x + name;
        return s;
    }
}

on va maintenant pouvoir compiler notre package et générer notre fichier jar

javac **/*.java
jar cfm test.jar infos.txt level

Testons notre jar

java -jar test.jar
> hello fred

Note

il est possible de supprimer l’ensemble des fichiers class d’un package en utilisant la ligne de code suivante (sous linux)

find ./ -name *.class -exec rm {} \;