Tutoriel sur une introduction d'une usine à application Java : « laFabrique »

Mik Arber

« laFabrique » est un nouvel outil facilitant la création d'application Java. Elle fournit plusieurs fonctions pour lancer, compiler, livrer, documenter et configurer vos logiciels. Cet article va vous montrer quelques-unes de ces fonctions.

Pour réagir au contenu de cet article, un espace de dialogue vous est proposé sur le forum. Commentez .

- Titre : Tutoriel sur une introduction d'une usine à application Java : « laFabrique »

- Auteur : Mik Arber

- Parution : 10 novembre 2014

- Licence : Copyright ® 2014 MIKARBER. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Créer votre première application

- III. Compiler

- IV. Exécuter

- V. Documenter

- VI. Conclusion

- VII. Remerciements

I - Introduction

« laFabrique » est une usine à applications Java. Elle fournit des outils aux développeurs, simplifiant la création de leurs propres applications. Ces outils permettent de :

- lancer l'application grâce à de simples annotations, à la gestion des paramètres et à la génération de script Linux et Windows ;

- configurer l'application via des propriétés potentiellement persistantes ;

- compiler l'application ;

- documenter l'application pour vos utilisateurs avec un logo ASCII ;

- livrer l'application sous forme de Jar ou de Zip.

Certaines de ces fonctions sont déjà fournies par des outils de « build » comme Gradle ou Maven, en étant plus proches de la simplicité de Gradle. « laFabrique » a été créée avec une orientation plus axée sur le développeur et moins sur le gestionnaire de production. C'est pour cela que le DSL(Domain Specific Language) est en Java, ce qui favorise l'apprentissage, la customisation et permet de déboguer vos futurs scripts de manière standard. De plus, étant 100 % Java, « laFabrique » peut-être utilisée dans les outils Java sans plug-in, comme dans l'IDE Eclipse. Cela va à l'encontre de Gradle avec son DSL maison et avec MAVEN ANT utilisant le langage XML.

Ce n'est pas qu'un outil de « build », elle vous donne aussi la possibilité de créer vos propres applications. La notion d'application est la partie d'un logiciel créant, démarrant, configurant et autodocumentant vos logiciels Java. Pour mieux la comprendre, lisez l'architecture générique globale sur http://capcaval.org. Vous verrez que « lafabrique » est la partie minimale pour créer des applications riches et complexes.

Plus d'informations sur le projet sont disponibles en Anglais sur http://lafabrique.capcaval.org.

Dans cet article, nous allons voir ensemble, comment créer, compiler, exécuter et documenter une application avec « laFabrique ».

II - Créer votre première application

Cet exemple est proposé sur un système d'exploitation de type Linux ; si vous êtes sur Windows, il suffit d'enlever les caractères « ./ » débutant les commandes. Par exemple pour « ./laFab help » sous windows, il faut exécuter « laFab help ».

Tout d'abord, assurez-vous de bien avoir un JDK installé. La version doit être égale ou supérieure à 1.7. Le plus simple est de lancer la commande suivante :

>javac -version
javac version "1.7.0_02"

Si cela n'est pas le cas, il vous suffit de télécharger et d'installer un JDK.

Ensuite, téléchargez « laFabrique » à l'adresse : http://lafabrique.capcaval.org/download.html. Extrayez les fichiers dans le répertoire de votre choix. Pour notre exemple, cela sera dans ~/temp.

Positionnez-vous dans le répertoire d'installation :

>cd ~/temp/laFabrique_0.0.3

Créez un nouveau projet, avec en premier paramètre le nom de projet et en deuxième le répertoire d'installation.

>./laFab newProject Calculator ~/temp
[laFabrique] INFO : create all following sub-dirs at /home/mik/temp/Calculator
[laFabrique] INFO : /home/mik/temp/Calculator/00_prj is created
[laFabrique] INFO : /home/mik/temp/Calculator/01_src is created
[laFabrique] INFO : /home/mik/temp/Calculator/02_lib is created

[laFabrique] INFO : Project Calculator has been created.

Voilà, maintenant vous avez votre premier projet « laFabrique ». Vous pouvez observer que les répertoires créés commencent par des chiffres, cela a pour avantage de maîtriser l'ordre d'apparence de ceci, comme dans les navigateurs de fichiers, dans les IDE, etc. Ici le choix a été fait de mettre en premier les plus importants et les plus utilisés. Cette maîtrise apporte une navigation plus rapide dans vos arborescences.

Dans « 00_prj », vous trouverez un DSL, ici le fichier « prj.Calculator.java » décrivant votre projet. À noter que vous pouvez, pour un même ensemble de sources, avoir plusieurs projets. Dans le dossier « 01_src », vous pouvez mettre vos sources. Pour finir, dans le répertoire « 02_lib », vous trouverez « laFab.jar » et vous pouvez y ajouter d'autres bibliothèques.

III - Compiler

Maintenant, il est possible de compiler le projet en se plaçant dans le nouveau projet :

>cd ~/temp/Calculator

puis en lançant :

>./laFab build
[laFabrique] INFO : Build default project.
[laFabrique] INFO : Start building Calculator project.
[laFabrique] INFO : Version to be built is : 0.0.1

[laFabrique] INFO : start compile project Calculator
[laFabrique] INFO : Found 2 classes inside [01_src, 01_src/prj]
[laFabrique] INFO : Compilation is successful. Classes are in 10_bin

[laFabrique] INFO : Start creating all scripts

« laFabrique » vient de compiler le projet sans aucune source. Créons donc le fichier source « Calculator.java » dans le répertoire « 01_src/calc » contenant les lignes suivantes :

package calc;

import org.capcaval.lafabrique.application.ApplicationTools;
import org.capcaval.lafabrique.application.annotations.AppInformation;
import org.capcaval.lafabrique.common.CommandResult;
import org.capcaval.lafabrique.commandline.Command;

@AppInformation (
about= {"describe here what your application does."})

public class Calculator{
public static void main(String[] args) {
CommandResult r = ApplicationTools.runApplication(
Calculator.class, args);
System.out.println(r.toString());
}

@Command(desc="perform addition.")
public int add(int a, int b){
return a + b;
}

}

Comme vous pouvez le voir, le fichier contient une annotation contenant une description de l'application. Nous verrons plus tard où cette information sera utilisée. Il y a aussi la méthode « main »avec un peu de quincaillerie qui permet à « laFabrique » de prendre la main pour pouvoir exécuter vos commandes qui sont identifiées grâce à l'annotation portant le même nom. Dans cet exemple, la méthode « add » devient accessible de l'extérieur, c'est-à-dire depuis la commande en ligne.

Après avoir écrit notre classe d'application, il ne reste plus qu'à compiler.

>./laFab build
[laFabrique] INFO : Build default project.
[laFabrique] INFO : Start building Calculator project.
[laFabrique] WARNING : Inside the project Calculator, the following source package does not exist : prj
[laFabrique] WARNING : prj will not be computed.
[laFabrique] INFO : Version to be built is : 0.0.1

[laFabrique] INFO : start compile project Calculator
[laFabrique] INFO : Found 1 classes inside [01_src]
[laFabrique] INFO : Compilation is successful. Classes are in 10_bin

[laFabrique] INFO : Start creating all scripts

Cette fois, « laFabrique » a bien compilé la nouvelle classe :).

IV - Exécuter

Pour exécuter votre nouvelle application, il suffit de lancer la très classique commande suivante :

>java -cp .:./10_bin:./02_lib/laFabrique.jar calc.Calculator add 1 2
3

Votre méthode est appelée avec les paramètres « 1 » et « 2 » et ainsi ramène le résultat « 3 ». « LaFabrique » prend à sa charge les transformations des paramètres d'entrées et de sorties.

Notre commande Java est relativement simple, car notre « classpath » est pratiquement vide. Néanmoins, « laFabrique » propose de générer vos scripts de lancement à partir de la description de vos projets. Cela est bien pratique lorsque le « classpath » est long, de plus il est réalisé pour les deux environnements que sont Linux et Windows.

Maintenant, nous allons voir aussi comment « laFabrique » permet de générer des scripts pour lancer vos applications.

Pour cela, il faut éditer le fichier « 00_prj/prj/Calculator.java » en ajoutant la ligne :

script.add("calc", calc.Calculator.class);

Le premier paramètre décrit le nom du script, ici « calc », le deuxième décrit le nom de la classe à exécuter. Cela fonctionne avec toutes les classes contenant une méthode « main ».

Recompilez :

>./laFab build
&#8230;
[laFabrique] INFO : Start creating all scripts
[laFabrique] INFO : New Windows script has been created : calc.bat
[laFabrique] INFO : New Linux script has been created : ./calc

Maintenant, vous pouvez lancer votre application plus simplement.

>./calc add 1 2
3

V - Documenter

Vous disposez aussi d'un autre outil intéressant : l'aide automatique. Pour l'afficher, il suffit de lancer la commande suivante :

>./calc help
-------------------------------------------------------------------------------
@@@@             @@                    @@@
@@@@@@@            @@                    @@@            @@
@@@   @            @@                    @@@            @@
@@@       @@@@@@    @@    @@@@  @@@   @@  @@@  @@@@@@  @@@@@@   @@@@@   @@@ @@
@@@       @@@@@@@   @@   @@@@@  @@@   @@  @@@  @@@@@@@ @@@@@@  @@@@@@@  @@@@@@
@@             @@   @@  @@@     @@@   @@  @@@       @@   @@    @@   @@  @@@@
@@         .@@@@@   @@  @@      @@@   @@  @@@   @@@@@@   @@   @@@   @@@ @@@
@@@       @@@@@@@   @@  @@      @@@   @@  @@@  @@@@@@@   @@   @@@   @@@ @@@
@@@       @@   @@   @@  @@      @@@  @@@  @@@ .@@   @@   @@   @@@   @@@ @@@
@@@   @  @@  @@@   @@  @@@     .@@  @@@  @@@ .@@  @@@   @@    @@.  @@  @@@
@@@@@@@  @@@@@@@   @@   @@@@@   @@@@@@@  @@@  @@@@@@@   @@@@  @@@@@@@  @@@
@@@@    @@@ @@   @@    @@@@    @@. @@  @@@   @@@ @@    @@@   .@@@.   @@@
-------------------------------------------------------------------------------
Version : 0.0.1      by CapCaval.org
About:
describe here what your application does.
-------------------------------------------------------------------------------

Properties :

Commands :
=> add : perform addition.
int -- :
int -- :

Vous retrouvez ainsi le nom de votre projet avec sa description que nous avons vue précédemment. Vous remarquerez qu'un numéro de version est indiqué, ainsi que l'auteur de l'application. Ce sont les valeurs par défaut mises à la création d'un nouveau projet. Pour les modifier, il suffit d'éditer le fichier « 00_prj/prj/Calculator.java ». Ce fichier correspond à la description du projet à compiler et contient aussi des informations sur l'application. Éditez le fichier avec une nouvelle version ainsi qu'un nouveau créateur. Comme ci-dessous :

...
public class Calculator extends Project{

@Override
public void defineProject(){
name("Calculator");
version("0.0.2");
author("Slash & Myles Kennedy & The Conspirators");
...

Recompilez le projet et relancez l'aide :

>./laFab build
...
>java -cp .:./10_bin:./02_lib/laFabrique.jar Calculator help
...
-------------------------------------------------------------------------------
Version : 0.0.2      by Slash & Myles Kennedy & The Conspirators
About:
describe here what your application does.
-------------------------------------------------------------------------------
...

Comme vous pouvez le voir, l'aide prend en compte les nouvelles informations. Cela a pour avantage d'être unique et centralisé, donc garantit la cohérence par exemple du numéro de version de votre code et de votre projet.

VI - Conclusion

Voilà, nous avons vu ensemble comment créer votre première application avec « laFabrique ». Nous avons vu la notion de commande pour application, nous avons vu comment compiler, ajouter des informations de manière centralisée et comment générer des scripts de lancement. Toutes ces fonctions vous permettent d'améliorer votre productivité quotidienne et cela avec un seul outil.

Des informations complémentaires peuvent être trouvées dans le premier lien ci-dessous. Les deux autres correspondent aux autres sites de l'auteur.

- Open source : http://capcaval.org

- Blog : http://miksblog.capcaval.org

- Humour codeur : http://100pcpc.com

VII - Remerciements

Nous tenons à remercier milkoseck pour sa relecture attentive de cet article et Mickaël Baron pour la mise au gabarit.