IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Maven Java Discussion :

[Maven2] Maven et chargement dynamique


Sujet :

Maven Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut [Maven2] Maven et chargement dynamique
    Bonjour à toutes et à tous,


    Imaginons un projet structuré de deux modules Maven.
    Le premier module est une librairie Java.
    Le second module est quant à lui une webapp, utilisant entre autres la librairie du 1er module.

    En compilant via Maven, j'obtiens donc un WAR, que je place ensuite dans Tomcat.
    Jusqu'ici tout va bien.

    Maintenant, je fais une petite modification dans la librairie.
    Le problème, c'est que si je veux que ma modification soit prise en compte, je recompile mon projet, je recrée ainsi mon WAR, je stoppe Tomcat (éventuellement), et je redéploie mon WAR. C'est assez lourd...

    Y a-t'il un moyen simple, avec Maven, de faire en sorte que la modification du code soit prise en compte dans Tomcat, sans avoir à tout recompiler et à redémarrer Tomcat (ou redéployer la webapp) ?
    En d'autres termes, existe t'il un moyen de charger à chaud les modifications de code avec Maven ?

    Pour l'instant, je ne vois pas trop de pistes... J'ai en fait l'impression que ce n'est pas possible simplement avec Maven, cet outil étant plutôt destiné aux environnements de déploiement ou d'intégration continue, plutôt que ceux des développeurs. Me trompe-je ?

    Merci de votre aide
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    Si tomcat recharge la webapp si tu modifies un de ces jars, il te suffit d'utiliser le plugin antrun afin de copier le jar dans tomcat

  3. #3
    Membre chevronné

    Inscrit en
    Septembre 2006
    Messages
    466
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 466
    Par défaut
    Bonjour,

    Le problème soulevé correspond à pouvoir faire du hot deploy. C'est une fonctionnalité qu'on cherche souvent à disposer pour le gain engrangé.

    Il est possible de faire cela avec le plugin jetty mais avec quelques limitations :
    • il faut utiliser le goal jetty:run-exploded pour que jetty prennent les librairies du repository interne (il vérifie dans ce cas si il y a eu un changement) ;
    • pour prendre en compte les modifs de ton jar, il faut le re-installer sur ton repository interne ;
    • il faut une configuration particulière dans le cas de génération de fichiers comme avec XDoclet. Par exemple, pour Struts, j'ai du faire la génération dans le répertoire src/webapps pour que ca fonctionne. Je suis toujours en train de chercher pour améliorer cela.


    Rémy

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    J'utilise le plugin cargo, qui est détaillé sur le site de Maven, pour déployer à chaud.
    Il permet même de lancer ou arrêter un serveur.
    A étudier.

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Déjà, merci pour vos réponses.

    Du coup, est-ce qu'avec ces plugins (je vais regarder plus en détail le plugin Cargo), je peux faire ça :

    J'édite, via Eclipse, un fichier de ma webapp (une JSP par exemple). Dès que je sauve, il va automatiser le déploiement pour cette nouvelle version du fichier, de manière à ce que je puisse tester ma modification sans attendre...
    De même, pour en revenir aux librairies, si je modifie un Java, qu'il puisse automatiquement déployer ma librairie dans mon conteneur dès que je lui demande de compiler ma librairie.
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  6. #6
    Membre chevronné

    Inscrit en
    Septembre 2006
    Messages
    466
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 466
    Par défaut
    Citation Envoyé par fr1man
    J'utilise le plugin cargo, qui est détaillé sur le site de Maven, pour déployer à chaud.
    Il permet même de lancer ou arrêter un serveur.
    A étudier.
    Avec cargo, il est effectivement possible de lancer, arrêter un serveur, de deployer, re-deployer une application web.

    Par contre, il ne me semblait pas possible de faire du hot deploy avec cargo, i.e. que cargo prenne automatiquement en compte les changements de l'application web pendant que cette dernière s'exécute.

    Rémy

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Pour mes besoins, j'ai inclus le redéploiement de l'application dans mon processus de build.
    Je modifie un fichier, je lance un build qui compile er redéploie l'application dans mon serveur, en l'occurence, JBoss.

  8. #8
    Membre chevronné

    Inscrit en
    Septembre 2006
    Messages
    466
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 466
    Par défaut
    C'est effectivement possible de faire comme cela mais dans le cas du hot deploy c'est le serveur d'application qui gère la synchronisation pour toi. L'avantage c'est que cela va généralement plus vite, par exemple si tu ne modifies qu'une jsp.

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 116
    Par défaut
    Cargo permet-il de déployer à chaud ?

    C'est assez fastidieux à installer cargo je trouve...

    Quelqu'un a-t-il une procédure simple ?

    Voici les commandes que j'ai utilisé :

    mvn plugin:download -DgroupId=org.codehaus.cargo -DartifactId=cargo-maven-plugin -Dversion=0.3-SNAPSHOT

    le download a commencé mais à échoué car il faut également ant et géronimo voici les commandes préconisées :

    Missing:
    ----------
    1) org.apache.geronimo.specs:geronimo-j2ee-deployment_1.1_spec:jar:1.0

    Try downloading the file manually from the project website.

    Then, install it using the command:
    mvn install:install-file -DgroupId=org.apache.geronimo.specs -DartifactId=geronimo-j2ee-deployment_1.1_spec \
    -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/file
    Alternatively, if you host your own repository you can deploy the file there: mvn deploy:deploy-file -DgroupId=org.apache.geronimo.specs -Dartif
    actId=geronimo-j2ee-deployment_1.1_spec \
    -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/file \
    -Durl=[url] -DrepositoryId=[id]

    Path to dependency:
    1) org.codehaus.cargo:cargo-maven2-plugin:maven-plugin:0.3-20070124.202954-6
    2) org.codehaus.cargo:cargo-core-container-resin:jar:0.9-SNAPSHOT
    3) org.codehaus.cargo:cargo-core-api-container:jar:0.9-20070124.202954-6
    4) org.apache.geronimo.specs:geronimo-j2ee-deployment_1.1_spec:jar:1.0

    2) ant:ant:jar:1.5.4

    Try downloading the file manually from the project website.

    Then, install it using the command:
    mvn install:install-file -DgroupId=ant -DartifactId=ant \
    -Dversion=1.5.4 -Dpackaging=jar -Dfile=/path/to/file
    Alternatively, if you host your own repository you can deploy the file there: mvn deploy:deploy-file -DgroupId=ant -DartifactId=ant \
    -Dversion=1.5.4 -Dpackaging=jar -Dfile=/path/to/file \
    -Durl=[url] -DrepositoryId=[id]

    Path to dependency:
    1) org.codehaus.cargo:cargo-maven2-plugin:maven-plugin:0.3-20070124.202954-6
    2) org.codehaus.cargo:cargo-core-container-resin:jar:0.9-SNAPSHOT
    3) org.codehaus.cargo:cargo-core-api-container:jar:0.9-20070124.202954-6
    4) ant:ant:jar:1.5.4
    Franchement c'est lourd comme installation...

    J'avais essayé également un script ant dans mon pom.xml du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <plugin>
            	<groupId>org.apache.maven.plugins</groupId>
            		<artifactId>maven-antrun-plugin</artifactId>
    				<executions>
    					<execution>
    						<id>install</id>
    						<phase>install</phase>
    						<configuration>
    							<tasks>
    							  <ant antfile="testAnt.xml">
    								<target name="test"/>
    							  </ant>
    							</tasks>
    						</configuration>
    						<goals>
    							<goal>run</goal>
    						</goals>
    					</execution>
    			    </executions>
    			</plugin>
    avec testAnt.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?xml version="1.0" encoding="UTF-8"?>
    <project name="testVincent">
     
        <target name="test">
     
    	  <echo message="Debut des traitements" />
     
    	  <property name="cible" value="C:/INST/jboss-4.2.0.GA/server/default/deploy/"/>
    	  <property name="source" value="../application-npdt-business/target/"/>
     
    	  <!-- Copie des fichiers -->
     
    	  <echo>${cible}</echo>
    	  <echo>${source}</echo>
     
    	  <!-- <copy file="${source}/*.war" tofile="${cible}"/> -->
     
    	  <!-- <copy todir="${jboss}" preservelastmodified="true">
    		<fileset dir="${source}" />
    			<include name="*.war" />
    		</fileset>
    	  </copy> -->
     
     
        </target>
     
    </project>
    Mais maven dit qu'il ne connais pas le plugin "maven-antrun" alors que son mon reposititory j'ai bien le jar de ant sous :

    C:\Documents and Settings\vboisnier\.m2\repository\org\apache\ant\ant\1.7.0

    Quelqu'un peut-il m'apporter une réponse claire ?

    Merci d'avance.

  10. #10
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 197
    Par défaut
    Cargo ne sait pas faire de hot deploy par defaut. il déploie ou retire la webapp selon la commande demandée. Ensuite tout dépend comment on configure le serveur d'app, car c'est lui qui peux prendre en charge le hotdeploy.
    Perso je n'avais pas lu ce thread, mais quel IDE utilisez vous ?
    Si c'est eclipse, le plugin maven-eclipse-plugin configurera pour vous l'extension WTP et vous pourrez faire du hot deploy et du debugging dans la plupart des serveurs d'app.
    (Cela commence a etre possible avec les plugins Q4E et m2eclipse mais je n'ai pas poussé a fond)

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 116
    Par défaut
    Bonjour,

    Merci pour la réponse rapide.

    J'utilise Eclise 3.3.2 WTP donc je vais tester les plugins que vous avez cité pour voir si mon problème se résout.

    Merci.

  12. #12
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 197
    Par défaut
    Dans ton pom :
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-eclipse-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
    <wtpversion>2.0</wtpversion>
    </configuration>
    </plugin>

    Ensuite mvn eclipse:clean eclipse:eclipse

    Sur le war il sera possible de faire un "deployer/debogger sur le serveur d'app" de ton choix. Maven aura généré une dépendance entre les projet war et le celui du jar si la commande est bien lancée au niveau du pom d'aggregation ce qui fera qu'une mise a jour d'une classe du jar rechargera la webapp (attention de ne pas en abuser car les serveurs d'app on souvent du mal a encaisser, perso je temporise et reforce des deploiements si necessaires).

Discussions similaires

  1. [jar]chargement dynamique.
    Par Teddy-htk dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 27/04/2006, 15h19
  2. [tomcat]chargement dynamique de classes depuis une webapp
    Par alphamax dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/03/2004, 09h59
  3. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20
  4. Dll a chargement dynamique
    Par delire8 dans le forum C++Builder
    Réponses: 7
    Dernier message: 05/06/2003, 22h47
  5. Chargement dynamique de DLL sous Unix
    Par Willou dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 18/12/2002, 18h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo