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 :

Résolution des dépendances : spécifier le scope dynamiquement


Sujet :

Maven Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 99
    Par défaut Résolution des dépendances : spécifier le scope dynamiquement
    Bonjour,

    Je dispose de 3 projets maven : projet A de packaging "pom", projet B de packaging "jar", projet C de packaging "jar".
    A est parent de B et de C.
    A ne contient que des "dependencies".
    B se sert des dépendances de A que dans un scope "provided" (B contient du code source qui doit compiler)
    C se sert des dépendances de A que dans un scope "runtime" (C ne fait que du pakaging du type war via l'aide d'un programme java externe et non avec maven).

    Pour que le programme java externe du projet C doit marcher, j'ai besoin des dépendances du projet A mais en scope runtime.

    Conclusion : je me retrouve avec un projet A dont ses dépendances doivent avoir un scope dynamique (provided si le fils est projet B, runtime si le fils est projet C).

    Je ne sais pas comment gérer ce dernier point : un scope dynamique.

    Merci de votre aide

  2. #2
    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
    Euh pourquoi tu mets un scope "provided" aux dépendances du projet B ?
    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

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 99
    Par défaut
    Ben "provided" est spécifique pour le projet B...mais ça ne marche pas pour le projet C bien sûr
    De toute façon, faut bien mettre quelque chose en scope pour une dépendance.

  4. #4
    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
    En fait, ma question c'est de savoir pourquoi tu ne mets pas le scope compile, ou alors tout simplement en ne mettant pas de scope du tout (ce qui revient au même, compile étant le scope par défaut).

    Le scope compile indique que la dépendance est toujours nécessaire : à la compilation, aux tests, à l'exécution.
    Ainsi, les dépendances de B seront des dépendances transitives de C (si C dépend de B), et seront donc intégrées à ton package final.
    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

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 99
    Par défaut
    Oups...merci de ta participation, je suis tellement dans mon projet (je suis en train de tout mettre en place jusqu'à l'intégration continue avec hudson + nexus)
    Alors pour en revenir à mon problème :

    Le projet C dépend de A
    Le projet B dépend de A
    Les projets B et C sont indépendants

    Déjà je sais que maven gère plusieurs classpath : compile, runtime, test.
    Et je ne suis pas sûr que des dépendance dans un scope compile peuvent être utilisées pour exécuter un programme java.
    J'utilise dans le projet C un plugin :

    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
    28
    29
    30
    31
    32
    33
    34
    <plugin>
    				<groupId>org.codehaus.mojo</groupId>
    				<artifactId>exec-maven-plugin</artifactId>
    				<version>1.1-beta-1</version>
    				<executions>
    					<execution>
    						<id>update-alfresco-war</id>
    						<phase>package</phase>
    						<goals>
    							<goal>java</goal>
    						</goals>
    					</execution>
    				</executions>
    				<configuration>
    					<mainClass>org.alfresco.repo.module.tool.ModuleManagementTool
    					</mainClass>
    					<classpathScope>runtime</classpathScope>
    					<!--
    						automatically creates the classpath using all project
    						dependencies, also adding the project build directory
    					-->
     
    					<arguments>
    						<argument>install</argument>
    						<argument>${project.build.directory}/${amp.filename}
    						</argument>
    						<argument>${project.build.directory}/${webapp.alfresco.filename}
    						</argument>
    						<argument>-force</argument>
    						<argument>-verbose</argument>
    						<argument>-nobackup</argument>
    					</arguments>
    				</configuration>
    			</plugin>
    Tu peux remarquer le "classpathScope" mis à "runtime" qui veut dire que le programme java que je lance via maven utilise les dépendances déclarées dans le pom.xml (dans le projet A) si elles appartiennent au classpath "runtime" de maven, cad celles déclarées avec un scope "runtime"
    Et c'est ce dont j'ai besoin dans ce projet C.
    Pour le projet B, je n'ai que besoin de compiler son code source en s'appuyant de ces mêmes dépendances (qui requiert donc un scope "compile" ou "provided").

    Voilà .

  6. #6
    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
    Citation Envoyé par zomurn Voir le message
    Déjà je sais que maven gère plusieurs classpath : compile, runtime, test.
    Et je ne suis pas sûr que des dépendance dans un scope compile peuvent être utilisées pour exécuter un programme java.
    Bien sûr que si. Même si le nom n'est pas forcément super adapté, compile signifie que la dépendance sera toujours nécessaire. Donc pour la compilation, mais aussi pour l'exécution.
    Une dépendance test ne sera disponible que durant la phase de test (et de compilation des tests unitaires). Pas avant, pas après.
    Une dépendance runtime n'est utilisée qu'à la livraison (création du package). Pas durant la compilation ou les tests.
    Une dépendance provided indique que la dépendance sera nécessaire au projet, mais est fournie par le containeur final (par exemple servlet.jar sera fourni par le serveur Tomcat).
    Enfin, le scope system est une dépendance normale (au même titre que compile) à l'exception que l'on spécifie où Maven doit trouver la dépendance (car elle ne se trouve pas dans le repository Maven). A éviter autant que possible !

    Citation Envoyé par zomurn Voir le message
    Tu peux remarquer le "classpathScope" mis à "runtime" qui veut dire que le programme java que je lance via maven utilise les dépendances déclarées dans le pom.xml (dans le projet A) si elles appartiennent au classpath "runtime" de maven, cad celles déclarées avec un scope "runtime".
    Et il se passe quoi si tu mets les dépendances du projet A en compile et que dans le classpathScope tu utilises compile ?
    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

Discussions similaires

  1. Portée (scope) des dépendances
    Par jecomprendsrien dans le forum Maven
    Réponses: 13
    Dernier message: 12/11/2012, 08h57
  2. Gestion de scope des dépendances maven
    Par menzlitsh dans le forum Maven
    Réponses: 1
    Dernier message: 16/07/2009, 02h17
  3. conception : table des dépendances
    Par gregolak dans le forum Langage SQL
    Réponses: 12
    Dernier message: 09/10/2005, 16h10
  4. [Free Pascal] Intégrer des valeurs dans un menu dynamique
    Par boullery dans le forum Free Pascal
    Réponses: 16
    Dernier message: 30/03/2005, 17h04
  5. Recherche des dépendances des modules
    Par slowpoke dans le forum Mandriva / Mageia
    Réponses: 9
    Dernier message: 11/12/2003, 08h49

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