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 :

Comment paramétrer un plugin ?


Sujet :

Maven Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut Comment paramétrer un plugin ?
    Bonjour,

    J'ai un projet web et j'aimerais copier le war issu de la compilation (mvn package) à un endroit spécifique suivant un paramètre. Par exemple, si j'indique "dev", le war est copié dans le répertoire de déploiement du serveur installé sur ma machine de développement. Si j'indique "preprod", le war est copié sur un serveur distant pour recette. Et si j'indique "prod", le war est copié sur un autre serveur (pourquoi pas sur la même machine).

    J'ai actuellement quelque chose qui fonctionne bien pour le premier cas ("dev") quand je fais un simple mvn package. J'ai dans mon pom.xml :
    Code xml : 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
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <tasks>
                                <copy file="target/monWar.war"
                                    todir="chemin vers mon serveur local">
                                </copy>
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    Je souhaiterais paramétrer maven-antrun-plugin pour une phase donnée de manière à ce qu'il ne me reste plus qu'à faire quelque chose comme mvn package dev, mvn package prod, ou mvn package prod.

    J'ai vu qu'il existait un plugin deploy et release, mais je suis pas vraiment sûr que ce soit bien adapté...

    Pouvez-vous m'aider ?

    Merci !

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    Regarde du côté des profiles. Tu peux créer un profile "prod", un "preprod" et un "dev" et activer celui que tu veux dans ta ligne de commande:

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut
    Super ça marche ! Merci !

    Par contre, j'aimerais faire quelque chose d'un peu particulier. J'aimerais ne pas inclure le chemin de destination du war directement dans le pom.xml, puisque chaque développeur sa propre installation de Tomcat, avec éventuellement un chemin différent. Donc j'aimerais paramétrer encore un peu le pom.xml à l'aide du fichier settings.xml de chaque développeur. On aurait ainsi un pom.xml commun à tous les déveoppeurs, et un settings.xml propre à chaque developpeur.

    J'ai pour l'instant dans mon pom.xml :
    Code xml : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <project>
        ...
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <configuration>
                                <tasks>
                                    <!-- Le paramètre toDir change en fonction du profile sélectionné -->
                                    <copy file="target/monWar.war"
                                        todir="${liferayDeployPath}">
                                    </copy>
                                </tasks>
                            </configuration>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
     
        <profiles>
            <profile>
                <id>dev</id>
                <properties>
                    <!-- on va chercher les paramètres dans settings.xml de l'utilisateur -->
                    <liferayDeployPath>${dev-liferayDeployPath}</liferayDeployPath>
                    <liferayUtilBridgeLibrary>${dev-liferayUtilBridgeLibrary}</liferayUtilBridgeLibrary>
                </properties>
            </profile>
     
            <profile>
                <id>preprod</id>
                <properties>
                    <!-- on va chercher les paramètres dans settings.xml de l'utilisateur -->
                    <liferayDeployPath>${preprod-liferayDeployPath}</liferayDeployPath>
                    <liferayUtilBridgeLibrary>${preprod-liferayUtilBridgeLibrary}</liferayUtilBridgeLibrary>
                </properties>
            </profile>
     
            <profile>
                <id>prod</id>
                <properties>
                    <!-- on va chercher les paramètres dans settings.xml de l'utilisateur -->
                    <liferayDeployPath>${prod-liferayDeployPath}</liferayDeployPath>
                    <liferayUtilBridgeLibrary>${prod-liferayUtilBridgeLibrary}</liferayUtilBridgeLibrary>
                </properties>
            </profile>
        </profiles>
    </project>

    Et mon seetings.xml
    Code xml : 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
    <settings>
        ...
     
        <profile>
            <id>dev</id>
            <properties>
                <dev-liferayDeployPath>chemin/vers/tomcat-dev/deploy</dev-liferayDeployPath>
                <dev-liferayUtilBridgeLibrary>chemin/vers/la/librairie/util-bridges.jar</dev-liferayUtilBridgeLibrary>
            </properties>
        </profile>
     
        <profile>
            <id>preprod</id>
            <properties>
                <preprod-liferayDeployPath>chemin/vers/tomcat-preprod/deploy</preprod-liferayDeployPath>
                <preprod-liferayUtilBridgeLibrary>chemin/vers/la/librairie/util-bridges.jar</preprod-liferayUtilBridgeLibrary>
            </properties>
        </profile>
     
        <profile>
            <id>prod</id>
            <properties>
                <prod-liferayDeployPath>chemin/vers/tomcat-prod/deploy</prod-liferayDeployPath>
                <prod-liferayUtilBridgeLibrary>chemin/vers/la/librairie/util-bridges.jar</prod-liferayUtilBridgeLibrary>
            </properties>
        </profile>
     
        ...
    </settings>

    Tout fonctionne à merveille. Sauf que maintenant, j'aimerais que le profile dev soit exécuté par défaut si aucun profile n'est précisé. J'ajoute donc la balise <activeByDefault> pour le profile dev dans mon pom.xml
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        ...
    <profile>

    Lorsque je fais mvn package, apparemment les champs ${dev-liferayDeployPath} et ${dev-liferayUtilBridgeLibrary} ne sont pas remplacés par les valeurs indiquées dans settings.xml. Existe-t-il un caractère d'échappement ? Ou peut-être que je ne fais pas les choses de la bonne manière...

  4. #4
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Tu peux aussi créer un profile par utilisateur qui s'active en fonction de la propriété ${user.name} où chacun renseignera ses chemins.

    Personnellement, je n'aime pas trop l'idée de mettre des propriétés dans le settings qui n'ont pas de rapport avec la configuration de maven (repository, proxy, ...).
    Là, c'est typiquement de la conf projet, donc sa place est dans le pom.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut
    Oui je comprends. J'avoue que je suis nouveau dans le monde Maven.

    Quand tu dis "un profile par utilisateur", tu veux dire un profile dev, un profile preprod, et un profile prod par utilisateur ? Si oui, mon pom.xml va devenir énorme non ?

  6. #6
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Non et oui

    Un pom, ça peut vite grossir, c'est sûr.
    La plupart du temps, un projet est rarement 'seul', il hérite d'un autre pom parent dans lequel on définit pas mal de choses pour alléger les pom fils.
    Mais le tout, c'est que cela soit bien documenté. Un pom est assez structuré pour pouvoir accéder aux infos qui nous intéresse directement.

    Sinon, ce que je proposais, c'est de faire
    - un profile dev, pre-prod, etc. commun à tous les dev d'un côté
    - un profile par developpeur de l'autre.
    Donc les profiles s'ajoutent, ils ne se multiplient pas, ce qui limite la casse

    En fait, dans tes profiles dev (...) tu spécifies le chemin de déploiement en fonction du type d'utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <liferayDeployPath>${preprod-liferayDeployPath}</liferayDeployPath>
    ça tu le fait déjà très bien.

    Ensuite, dans chaque profile utilisateur, tu définis les valeurs de ces variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <preprod-liferayDeployPath>/home/toto/preprod</preprod-liferayDeployPath>
    <prod-liferayDeployPath>/home/toto/prod</prod-liferayDeployPath>
    ...
    ça te semble plus clair?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut
    Merci pour ta réponse Deaf ! Oui c'est clair... dans le principe ! En revanche, en pratique ça l'est moins

    Comme je l'ai évoqué dans un post précédent, je souhaite donner un profile par défaut lorsque je fais un mvn package, et notamment le profile dev. Pour que le profile associé au nom de l'utilisateur courant soit "lancé" automatiquement quand aucun profile n'est précisé (profile par défaut), je suis obligé d'ajouter un profile avec l'id ${user.name} qui aura la balise <activeByDefault> à true. Puis, pour chacun des utilisateurs, je crée un autre profile qui contiendra les chemins propres à chaque utilisateur.

    Mon pom.xml :
    Code xml : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- variables définies dans le profile ${user.name} -->
                <liferayDeployPath>${dev-liferayDeployPath}</liferayDeployPath>
                <liferayUtilBridgeLibrary>${dev-liferayUtilBridgeLibrary}</liferayUtilBridgeLibrary>
            </properties>
        </profile>
     
        ...
     
        <profile>
            <id>${user.name}</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- variables définies dans les profiles propres aux utilisateurs -->
                <dev-liferayDeployPath>${user-dev-liferayDeployPath}</dev-liferayDeployPath>
                <dev-liferayUtilBridgeLibrary>${user-dev-liferayUtilBridgeLibrary}</dev-liferayUtilBridgeLibrary>
            </properties>
        </profile>
     
        <profile>
            <id>user1</id>
            <properties>
                <user-dev-liferayDeployPath>C:/user1/liferay-portal-5.2.3-dev/deploy</user-dev-liferayDeployPath>
                <user-dev-liferayUtilBridgeLibrary>C:/user1/devenv/lib/liferay/util-bridges.jar</user-dev-liferayUtilBridgeLibrary>
            </properties>
        </profile>
     
        <profile>
            <id>user2</id>
            <properties>
                <user-dev-liferayDeployPath>C:/user2/liferay-portal-5.2.3-dev/deploy</user-dev-liferayDeployPath>
                <user-dev-liferayUtilBridgeLibrary>C:/user2/devenv/lib/liferay/util-bridges.jar</user-dev-liferayUtilBridgeLibrary>
            </properties>
        </profile>
    </profiles>

    Ca, ça ne fonctionne pas. Pourquoi ? Parce que je n'arrive pas à faire de lien entre le profile ${user.name} et le profile propre à chaque utilisateur. Ce que je veux c'est que le profile ${user.name} "appelle" le profile propre à chaque utilisateur.

    Les profiles par défaut sont dev et ${user.name}. Si le profile ${user.name} arrive à récupérer les valeurs déclarées dans le profile de chaque utilisateur, ça fonctionnerait. C'est une sorte de dépendance, voire d'héritage. J'ai cherché sur Google, mais le seul concept de dépendance concernant les profiles est celui entre plusieurs pom.xml.

    Comment faire ?

  8. #8
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Il faut que te supprime ton profile ${user.name} et que tu ajoutes aux profiles utilisateurs la condition d'activation suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <profile>
          <id>toto</id> <!-- Profil de l utilisateur "toto" -->
          <activation>
            <activeByDefault>false</activeByDefault>
            <property>
              <name>${user.name}</name>
              <value>toto</value>
            </property>
          </activation>
          ...
        </profile>
    NB: L'ID du profil n'est pas important, tant qu'il est unique.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut
    Oui c'est vrai c'est idiot ce que j'ai essayé de faire

    J'ai encore une question (désolé... ). D'après ce que j'ai vu dans la documentation, la balise <property> sous <activation> s'utilise comme ça :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <profile>
        <id>monProfile</id>
        <activation>
            <property>
                <name>nomProp</name>
                <value>valProp</value>
            </property>
        </activation>
    </profile>

    Puis en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mvn package -DnomProp=valProp (avec -Pnom_d_un_autre_profile)
    L'exemple que tu as donné :
    Citation Envoyé par Deaf
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <profile>
          <id>toto</id> <!-- Profil de l utilisateur "toto" -->
          <activation>
            <activeByDefault>false</activeByDefault>
            <property>
              <name>${user.name}</name>
              <value>toto</value>
            </property>
          </activation>
          ...
        </profile>
    permet-il de s'affranchir de ce paramètre (-DnomProp=valProp) ?

    Avec l'exemple que tu viens de donner j'ai l'impression qu'il faut faire la commande suivante pour prendre en compte le profile (si mon username courant est sheepolata) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mvn package -Dsheepolata=toto

  10. #10
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Ouuppss

    En effet, comme il s'agit du nom de la propriété, le ${} n'a pas être là!
    Donc essaie avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <profile>
          <id>toto</id> <!-- Profil de l utilisateur "toto" -->
          <activation>
            <activeByDefault>false</activeByDefault>
            <property>
              <name>user.name</name>
              <value>toto</value>
            </property>
          </activation>
          ...
        </profile>

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut
    J'ai mis en place ta solution et ça marche presque. En effet, voici les problèmes que je rencontre :
    • Ca ne marche que lorsque je fais un mvn package -Pdev, mvn package -Ppreprod, ou mvn package -Pprod (ça fonctionne bien quand je change de user et je n'ai pas besoin de préciser le username dans la ligne de commande)
    • Ca ne marche pas avec mvn package tout seul alors que j'ai précisé <activeByDefault>true</activeByDefault> pour les profile qui faut.
    • Ca ne marche pas avec d'autre goals (clean, install, deploy, etc.)


    Voici le rapport d'erreur que j'obtiens pour les deux derniers points (voir en gras dans le log) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [INFO] Scanning for projects...
    [ERROR] The build could not read 1 project -> [Help 1]
    [ERROR]   The project monGroupId:monProjet:0.0.1-SNAPSHOT (C:\monProjet\pom.xml) has 1 error
    [ERROR]     For dependency com.liferay:util-bridge:jar: system-scoped dependency must specify an absolute systemPath but is ${liferayUtilBridgeLibrary}
    [ERROR] 
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR] 
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
    Mon pom.xml :
    Code xml : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <profiles>    
        <profile>
            <id>dev</id>
            <activation>
                <!-- profile par défaut -->
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <liferayUtilBridgeLibrary>${user-liferayUtilBridgeLibrary}</liferayUtilBridgeLibrary>
                <liferayDeployPath>${user-dev-liferayDeployPath}</liferayDeployPath>
            </properties>
        </profile>
     
        ...
     
        <profile>
            <id>sheepolata</id>
            <activation>
                <!-- profile par défaut -->
                <activeByDefault>true</activeByDefault>
                <property>
                    <name>user</name>
                    <value>sheepolata</value>
                </property>
            </activation>
            <properties>
                <user-liferayUtilBridgeLibrary>C:/sheepolata/lib/liferay/util-bridges.jar</user-liferayUtilBridgeLibrary>
                <user-dev-liferayDeployPath>C:/sheepolata/tomcat-dev/deploy</user-dev-liferayDeployPath>
            </properties>
        </profile>
     
        <profile>
            <id>user2</id>
            <activation>
                <property>
                    <name>user.name</name>
                    <value>user2</value>
                </property>
            </activation>
            <properties>
                <user-liferayUtilBridgeLibrary>C:/user2/lib/liferay/util-bridges.jar</user-liferayUtilBridgeLibrary>
                <user-dev-liferayDeployPath>C:/user2/tomcat-dev/deploy</user-dev-liferayDeployPath>
            </properties>
        </profile>
    <profiles>
     
    ...
     
    <dependencies>
        <dependency>
            <groupId>com.liferay</groupId>
            <artifactId>util-bridge</artifactId>
            <version>1.0</version>
            <scope>system</scope>
            <!-- voici où est utilisée la variable ${liferayUtilBridgeLibrary} (celle donnée dans le rapport d'erreur) -->
            <systemPath>${liferayUtilBridgeLibrary}</systemPath>
        </dependency>
    </dependencies>

    Merci pour ta patience
    Si d'autres se sentent inspirés, qu'ils n'hésitent pas !

Discussions similaires

  1. [Plugin][VE]Comment installer un plugin ?
    Par Smalljim dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 15/02/2006, 19h38
  2. [ODBC][Delphi5] Comment paramétrer ma connection ?
    Par aitallaoua dans le forum Paradox
    Réponses: 1
    Dernier message: 21/12/2005, 21h32
  3. Comment paramétrer un groupe d'option
    Par lou.souleu dans le forum Access
    Réponses: 8
    Dernier message: 17/09/2005, 06h30
  4. Réponses: 13
    Dernier message: 16/03/2005, 11h29

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