Organiser correctement une web-app (développement et deploiement)

Organiser correctement une web-app (développement et deploiement) - Java - Programmation

Marsh Posté le 13-02-2004 à 12:04:57    

Je développe une "grosse" web-app, depuis maintenant 1 an. Je vais encore être amené à la retoucher très souvent. J'ai décidé de réorganiser le "projet" (au sens informatique).
 
Voici la  situation actuelle :
- mon IDE "pointe" directement sur le répertoire web-app de mon appli dans le moteur de servlet.
- les sources de mes classes sont dans les mêmes répertoires que mes classes compilées (WEB-INF/classes).
 
Bref, actuellement, l'environnement de développement est complètement mélangé à l'environnement d'execution.
Je compte utiliser ANT pour pouvoir séparer entièrement les 2 environnements.
 
Voila mes contraintes :
- l'ensemble des sources du projet (JSP, servlets, web.xml) doit se trouver au même endroit (plus pratique pour les sauvegardes et pour se passer le projet d'une personne à l'autre).
- la compilation/déploiement/tests en conditions réelles (sur moteur de servlets) doit se faire simplement.
 
J'imagine que mes contraintes n'ont rien d'exceptionnel, alors je demande a tous ceux qui développent des web-app proprement : comment vous avez organisé tout ça ? (nottament au niveau du placement de JSP dans le répertoire de dev, des classes, le script ANT s'il y a, ...
 
Merci a ceux qui vont m'aider (et qui seront très nombreux, j'en suis sur :D )


Message édité par El_gringo le 27-01-2006 à 01:18:18

---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 13-02-2004 à 12:04:57   

Reply

Marsh Posté le 13-02-2004 à 16:33:19    

Hé ben quel succès!  
Bon, ben j'me suis débrouillé tout seul. :na:  
J'ai fait mon build.xml
 
Je me suis inspiré de ça (ce que je demandais ici en gros):
http://membres.lycos.fr/afriksoft/ [...] ld_xml.php
et j'ai bien sur utilisé aussi le manuel ANT :
http://ant.apache.org/manual/
 
Je vas poster mon script ici. Il permet de faire principalement 2 choses :  
- déployer sur mon moteur de servlet en local, avec compilation débug
- créer un .war pour la distribution
 
ça se veut relativement générique, à condition de respecter une certaine architecture dans le projet de dev et de modifier les 2 propriétés du départ (nom de l'appli et chemin de tomcat).
Pour les remarques, vous gênez pas.
Voila ce que ça donne :


<?xml version="1.0" encoding="ISO-8859-1"?>
 
<project name="ldsweb2" default="dist" basedir=".">
 
    <description>
        Fichier ant de ldsweb2
    </description>
 
    <!-- Variables specifiques a l'application -->
    <property name="app.name" value="ldsweb2"/>
    <property name="tomcat.home" location="C:\Tomcat4"/>
 
 
    <!-- répertoires "standards" -->
    <property name="build.dir" location="build"/>
    <property name="diffusion.dir" location="config_diffusion"/>
    <property name="dev.dir" location="config_dev"/>
 
 
    <target name="init" depends="clean" description="initialisation précedant toute autre target">
        <tstamp/>
    </target>
 
    <target name="show" description="affiche des infos">
        <echo>
            Script ANT pour ldsweb2
            Auteur: Marc Claustre
        </echo>
    </target>
 
 
    <target name="prepare" depends="init,show" description="crée l'architecture web-app J2EE - copie les fichiers">
 
        <!-- copie le contenu web -->
        <mkdir dir="${build.dir}"/>
        <copy todir="${build.dir}">
            <fileset dir="web"/>
        </copy>
 
        <!-- copie les libs -->
        <mkdir dir="${build.dir}/WEB-INF/lib"/>
        <copy todir="${build.dir}/WEB-INF/lib">
            <fileset dir="lib"/>
        </copy>
 
        <!-- Prépare chemin pour stocker les classes compilées -->
        <mkdir dir="${build.dir}/WEB-INF/classes"/>
 
    </target>
 
 
    <target name="compile" depends="prepare" description="compile les classes dans la web-app (pas d'infos de debug)">
        <javac srcdir="src" destdir="${build.dir}/WEB-INF/classes">
            <include name="**/*.java"/>
            <!-- Pas de classpath : généré par IntelliJ
                <classpath refid="classpath"/>
            -->
        </javac>
    </target>
 
    <target name="compile_debug" depends="prepare" description="compile les classes dans la web-app (avec infos de debug)">
        <javac srcdir="src" destdir="${build.dir}/WEB-INF/classes" debug="true">
            <include name="**/*.java"/>
            <!-- Pas de classpath : généré par IntelliJ
                <classpath refid="classpath"/>
            -->
        </javac>
    </target>
 
 
    <target name="prepare_dist" depends="compile" description="prépare la web-app pour distribution">
 
        <copy todir="${build.dir}">
            <fileset dir="${diffusion.dir}"/>
        </copy>
    </target>
 
    <target name="prepare_deploy" depends="compile_debug" description="prépare la web-app pour développement">
 
        <copy todir="${build.dir}">
            <fileset dir="${dev.dir}"/>
        </copy>
    </target>
 
 
    <target name="dist" depends="prepare_dist" description="crée le fichier war de la web_app">
        <war destfile="${app.name}.war" basedir="${build.dir}" webxml="src/web.xml" />
    </target>
 
    <target name="deploy" depends="prepare_deploy" description="déploie la web-app sur tomcat">
        <copy todir="${tomcat.home}/webapps/${app.name}">
            <fileset dir="${build.dir}"/>
        </copy>
    </target>
 
 
    <target name="clean" description="supprime le répertoire utilisé pour la construction">
        <delete dir="${build.dir}"/>
    </target>
 
</project>


Message édité par El_gringo le 13-02-2004 à 16:33:53

---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 13-02-2004 à 16:38:31    

1. j'avais pas vu ton sujet
2. Je fais tout ce que tu decris avec Ant et un peu plus en passant et je suis pas le seul ici  
 
tu devrais voir toutes les task de Ant, tu peux faire beaucoup plus que ca :jap:


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 16:42:45    

uriel a écrit :

1. j'avais pas vu ton sujet
2. Je fais tout ce que tu decris avec Ant et un peu plus en passant et je suis pas le seul ici  
 
tu devrais voir toutes les task de Ant, tu peux faire beaucoup plus que ca :jap:


 
Je m'en doutais que j'étais pas le seul à avoir besoin de ça. Tant pis, j'suis content quand même de ce que j'ai fait, personne me cassera mon bonheur :D
Mon script c'est un début, j'aurais surement 2 ou 3 choses à y ajouter.
Tu proposes quoi de plus toi au juste ?
Et ANT, j'ai vu qu'il fait beaucoup plus, mais je suis pas sur que j'ai l'utilité de tout ça. J'veux pas non plus passer ma vie à écrire un script. 'faut aussi que je prenne un peu de temps pour développer ! :p


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 13-02-2004 à 16:46:12    

C'est clair que ca depend de tes besoins, mais tu peux utiliser la generation de la javadoc, faire appel à des doclet specifique aussi (x doclet pour pas le citer), utiliser CVS, enfin toute la panoplie j2ee si tu en as le besoin.  
Je pense qu'il vaut mieux perdre du temps sur le scritp ant, ca te fera gagner du temps par la suite :)


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 16:53:09    

uriel a écrit :

C'est clair que ca depend de tes besoins, mais tu peux utiliser la generation de la javadoc, faire appel à des doclet specifique aussi (x doclet pour pas le citer), utiliser CVS, enfin toute la panoplie j2ee si tu en as le besoin.  


 
Rien de tout ça ne me serait terriblement utile pour l'instant (on a pas de serveur CVS). Pour la doc, peut être que j'ajouterai ça.
J'aurais le droit de le voir ton build.xml (s'il est générique bien sur)
 

uriel a écrit :


Je pense qu'il vaut mieux perdre du temps sur le scritp ant, ca te fera gagner du temps par la suite :)


 
J'rigolais. J'pense plutôt la même chose. D'ailleuesr je viens de passer mon après midi à ça. Et puis c'est agréable quand on pense a tous ces trucs fastidieux qu'on évitera par la suite en faisant ça! Les livraisons, ça va devenir un vrai plaisir! :D


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 13-02-2004 à 16:58:58    

euh, pour mon build.xml, il est pas generique (je bossais sur JBoss mais plsu maintenant, on va passer sur une solution hibernate)
Mais pour la javadoc, ca donne quelque chose comme ca:

Code :
  1. <javadoc packagenames="com.dummy.test.*"
  2.            sourcepath="src"
  3.            destdir="docs/api"
  4.            author="true"
  5.            version="true"
  6.            use="true"
  7.            windowtitle="Test API"
  8.            doctitle="<h1>Test</h1>"
  9.            bottom="<i>Copyright &#169; 2000 Dummy Corp. All Rights Reserved.</i>">
  10.     <group title="Group 1 Packages" packages="com.dummy.test.a*"/>
  11.     <group title="Group 2 Packages" packages="com.dummy.test.b*"/>
  12.     <link offline="true" href="http://java.sun.com/products/jdk/1.2/docs/api/" packagelistLoc="C:\tmp"/>
  13.     <link href="http://developer.java.sun.com/developer/products/xml/docs/api/"/>
  14.   lt;/javadoc>


quant à x doclet, il pourrait te servir un jour, beaucoup de temps de gagner:
http://xdoclet.sourceforge.net/
et il y en a qui l'utilise avec Idea ici, il doit y avoir un plugin ou un truc comme ca :jap: (moi suis sur eclipse)


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 17:01:21    

Merci. (j'regarderais ça plus en détails Lundi)


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 13-02-2004 à 17:14:29    

Et utiliser des "variables", histoire d'incrémenter automatiquement un numéro de version, histoire de l'inclure dans mes sources, sans réécrire de nouvelle "task", vous croyez que c'est possible ? si oui, comment ?


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 13-02-2004 à 17:16:42    

el_gringo a écrit :

Et utiliser des "variables", histoire d'incrémenter automatiquement un numéro de version, histoire de l'inclure dans mes sources, sans réécrire de nouvelle "task", vous croyez que c'est possible ? si oui, comment ?


 
oui tu peux le faire avec la date par exemple.... mais pour l'inclure dans tes sources, je vois pas, ni comment , ni l'interet  [:spamafote]


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 17:16:42   

Reply

Marsh Posté le 13-02-2004 à 17:23:25    

uriel a écrit :


 
oui tu peux le faire avec la date par exemple.... mais pour l'inclure dans tes sources, je vois pas, ni comment , ni l'interet  [:spamafote]  


 
 
Ben, pour indiquer automatiquement la nouvelle version de ma web-app à chaque livraison, modifier le @version de la javadoc par exemple, et puis j'ai une constante dans mes sources qui indique le numéro de version (histoire de pouvoir vérifier la version via la web-app).
En fait la date, c'est nécessaire, mais pas suffisant, il faudrait que je puisse incrémenter un numéro.
Dans ma boite les numéros de version sont sur ce shéma :
n°majeur.n° mineur,n°release (incrémenté à chaque livraison).aammjj (année, mois, jour).
Tu vois comment générer ça automatiqueemnt avec ANT ?


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 13-02-2004 à 17:25:21    

ca doit etre faisable (tout est faisable avec ant) par contre pour la modif dans le code source je sais pas, mais l'incrementation  du numero de l'archive doit etre faisable


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 17:35:33    

uriel a écrit :

ca doit etre faisable (tout est faisable avec ant) par contre pour la modif dans le code source je sais pas, mais l'incrementation  du numero de l'archive doit etre faisable


 
Si si, la modif dans le code source c'est le seul truc dont je suis sur que c'est faisable grace à la "task" Replace (permet de remplacer une chaine par une autre dans un fichier donné).
Reste à trouver comment calculer le nouveau numéro de version et l'affecter à une "property"...


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 13-02-2004 à 17:37:11    

el_gringo a écrit :


 
Si si, la modif dans le code source c'est le seul truc dont je suis sur que c'est faisable grace à la "task" Replace (permet de remplacer une chaine par une autre dans un fichier donné).
Reste à trouver comment calculer le nouveau numéro de version et l'affecter à une "property"...


 
si tu peux faire un replace, avec properties, tu recuperes le numero, l'incremente et le remplace  [:wawash]


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 17:57:59    

he ben
jveux pas te demonter, mais t'aurais utilisé maven t'aurais pas à te palucher ton script ant ...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-02-2004 à 18:00:14    

j'ai jamais utilisé Maven [:tinostar]


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 18:01:57    

ben faut un début a tout [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-02-2004 à 18:03:13    

uriel a écrit :


quant à x doclet, il pourrait te servir un jour, beaucoup de temps de gagner:
http://xdoclet.sourceforge.net/
et il y en a qui l'utilise avec Idea ici, il doit y avoir un plugin ou un truc comme ca :jap: (moi suis sur eclipse)

y'a aussi un "plugin" pour eclipse hein... le seul truc à faire c'est betement de lui dire quels sont les @tags valides [:spamafote]
 
chuis content de voir enfin qqun d'ici qui utilise xdoclet et hibernate ! !! !!


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-02-2004 à 18:04:20    

effectivement, on se demande justement quelle techno utiliser comme framework, vu que on va utiliser Hibernate, WSIF, Tomcat...  
maven doit convenir [:meganne]


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 18:05:23    

the real moins moins a écrit :

y'a aussi un "plugin" pour eclipse hein... le seul truc à faire c'est betement de lui dire quels sont les @tags valides [:spamafote]


 
pour eclipse je sais, je l'ai, mais visiblemet gringo utilise Idea (dans le script ant) :jap:


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 18:08:29    

uriel a écrit :

effectivement, on se demande justement quelle techno utiliser comme framework, vu que on va utiliser Hibernate, WSIF, Tomcat...  
maven doit convenir [:meganne]

ben ça depend ce que t'entend par framework hein !!
maven ça te permet juste de builder ton projet, de gerer les dependences tres facilement, et de builder des tas de reports.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-02-2004 à 18:11:37    

the real moins moins a écrit :

ben ça depend ce que t'entend par framework hein !!
maven ça te permet juste de builder ton projet, de gerer les dependences tres facilement, et de builder des tas de reports.


 
sachant que je suis en plein dans la doc pour etudier justement l'interet de tel ou tel outils, pour l'instant c'est pas tres clair pour moi  [:spamafote]  
j'aurais voulu eviter d'avoir trop de bordel vu que je serais pas seul sur le projet et donc gerer le tout par un outils commun, maven est un outils de gestion de projet, c'est ce que je recherche  [:spamafote] à voir si il est suffisnt ou si il est trop puissant pour ce dont j'ai besoin


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 18:17:37    

il est très bien :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-02-2004 à 18:18:14    

:jap:
tu as deja utilisé Cocoon ?


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 18:23:04    

nan :o
(c'est un machin relou pour l'xml ça nan?)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-02-2004 à 18:27:47    

the real moins moins a écrit :

nan :o
(c'est un machin relou pour l'xml ça nan?)


 
oui, http://cocoon.apache.org/
c'est un truc qui te permet de gerer l'affichage de l'appli, mais aussi de communiquer avec les autres appli en XML si j'ai bien compris (entre autre) faut que je vois l'interet pour moi


---------------
IVG en france
Reply

Marsh Posté le 13-02-2004 à 18:28:34    

faut aimer le xml, le xsl et toute la clique :/


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 13-02-2004 à 18:31:36    

[:vomi]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 14-02-2004 à 01:04:38    

mouais mais le truc c'est que nos differentes appli communique entre elles par XML... format de sortie assez standard
 
edit: je m'explique , on a des vieux prog qui sortent des fichiers texte en sortie, on a fait en sorte qu'il fasse du XML, d'autre l'accepte en entrée, et ainsi de suite, avec 2 ou 3 different soft dans different endroits -> services web, mais aussi presentation des resultats intermediaires, d'ou XSL et Cocoon  [:spamafote]


Message édité par uriel le 14-02-2004 à 01:06:37

---------------
IVG en france
Reply

Marsh Posté le 14-02-2004 à 02:49:04    

hmmm ok :)

Reply

Marsh Posté le 16-02-2004 à 13:40:35    

the real moins moins a écrit :

he ben
jveux pas te demonter, mais t'aurais utilisé maven t'aurais pas à te palucher ton script ant ...


 
1) Maven je connaisais pas (et je connais toujours pas)
2) Au moins ça m'a permis de découvrir la fonctionnement de base de ANT
3) Mon script est tout simple et ne nécessite l'installation de rien d'autre que mon IDE (IntelliJ), ça me va très bien. Et puis je sais exactement ce que je fais comme ça.
 
(je jeterai quand même un oeil à Maven, par curiosité)


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 16-02-2004 à 13:42:00    

uriel a écrit :


 
si tu peux faire un replace, avec properties, tu recuperes le numero, l'incremente et le remplace  [:wawash]  


 
Ben, mon problème, c'est justement de l'incrémenter (et en prime, d'y ajouter la date au format aaaammjj (avec tstamp j'imagine). Bref, faire un calcul et modifier une property lue.


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 16-02-2004 à 17:02:14    

ça inspire personne aujourd'hui ?


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 17-02-2004 à 08:53:37    

Petit up du matin...


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 17-02-2004 à 17:15:19    

Bon, ben ça a pas l'air d'interresser grand monde, mais j'ai trouvé ça :


        <propertyfile file="${webapp.dir}/_version.txt">
            <entry key="version.release" type="int" operation="+" value="1" pattern="000"/>
            <entry key="version.date" type="date" operation="=" value="now" pattern="yyMMdd"/>
            <entry key="version.total" type="string" operation="=" value="${ant.project.name}_"/>
            <entry key="version.total" type="string" operation="+"
                value="${version.majeure}.${version.mineure}.${version.mineure}.${version.date}"/>
        </propertyfile>


Message édité par El_gringo le 17-02-2004 à 17:15:32

---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 17-02-2004 à 17:17:16    

c'est pas que ca m'interesse pas mais je connais pas de reponse à ta question, je connaissais pas ce que tu viens de poster, donc tu peux incrementer un nombre :jap: mais ca ne modifie pas le code, jsute l'archive que ant va te generer, c'est ca ?


---------------
IVG en france
Reply

Marsh Posté le 17-02-2004 à 17:27:34    

uriel a écrit :

c'est pas que ca m'interesse pas mais je connais pas de reponse à ta question, je connaissais pas ce que tu viens de poster, donc tu peux incrementer un nombre :jap: mais ca ne modifie pas le code, jsute l'archive que ant va te generer, c'est ca ?


 
Ouais. vu que je suis en train de mettre la chose en place, c'est moi qui fixe les règles : la version ne sera pas en dur dans le code. Si on veut l'afficher via l'appli, on ira la lire dans le fichier _version.txt.


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 17-02-2004 à 17:28:58    

Par contre j'ai à nouveau un problème : j'arrive pas à trouver comment on peut exécuter telle ou telle tâche en fonction d'un choix utilisateur (task "input" ). Avec la task "condition", je vois qu'on peut fixer une propriété en fonction d'une condition donnée, mais exécuter une tâche, je vois pas. Tu sais faire ça ?


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 17-02-2004 à 17:29:24    

ok, c'est toujours mieux que rien, mais tu as regardé Maven, qui apparement te permets ca?


---------------
IVG en france
Reply

Marsh Posté le 18-02-2004 à 08:43:54    

uriel a écrit :

ok, c'est toujours mieux que rien, mais tu as regardé Maven, qui apparement te permets ca?


 
Non. ANT est intégré à mon IDE. Je veux pas faire installer autre chose à toute ma boite.


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed