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** .. code-block:: 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 .. code-block:: bash javac hello.java - j'execute .. code-block:: bash 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 .. code-block:: java public class Test { public static void main(String[] args) { MyHello m; m = new MyHello(); System.out.println(m.getText("fred")); } } MyHello.java .. code-block:: java public class MyHello { private String x = "hello "; public String getText(String name) { String s = x + name; return s; } } - je compile .. code-block:: bash javac MyHello.java Test.java - j'execute .. code-block:: bash 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** .. code-block:: bash Main-Class: Test Nous allons maintenant compiler nos class et créer notre **jar** .. code-block:: bash javac *.java jar cfm test.jar infos.txt *.class Testons notre **jar** .. code-block:: bash 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** .. code-block:: bash Main-Class: level.Test Test.java .. code-block:: 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 .. code-block:: 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 .. code-block:: bash javac **/*.java jar cfm test.jar infos.txt level Testons notre **jar** .. code-block:: bash 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) .. code-block:: bash find ./ -name *.class -exec rm {} \;