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 :

[MAVEN] Utilisation des archetypes


Sujet :

Maven Java

  1. #1
    Membre habitué Avatar de DanielW33
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2006
    Messages : 327
    Points : 164
    Points
    164
    Par défaut [MAVEN] Utilisation des archetypes
    J'ai cree un archetype pour un type de projet pour mon client :
    Maintenant, lorsque je lance la commande archetype:create, aucun probleme pour creer mon projet mais je desire egalement remplacer des variables ( autres que groupId, artifactId ou version ) par des valeurs en dur ( ex nom de module et sous-module , non de certains repertoires ou fichier, certaines variables dans le fichier pom.xml ).
    Ma question est : comment faire ?

  2. #2
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    ben dans ton pom.xml que tu veux valoriser tu positionnes une variable du type

    ${myvar}

    et quand tu lances archetype:create, tu rajoutes -Dmyvar=toto mais c'est à vérifier

    Maintenant si tu en as trop, tu fais comme moi, j'ai crée mon propre plugin d'archetype et je lui passe un fichier de propriétés et ensuite je charge les propriétés que je sette dans la Map des attributs qui sert à la méthode archetype.createArchetype(...)

    je suis pas sûr d'avoir été clair

  3. #3
    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 : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    A mon avis - je n'ai pas assez utilisé ce plugin - je doute qu'il soit suffisament paramètrable pour faire ce que tu veux.

    La 1e idée de dvicente72, je doute qu'elle fonctionne, dans la mesure où l'archetype va créer le fichier pom.xml, qui est inexistant avant l'exécution du plugin...

    Je penche donc plutôt pour sa 2e idée...

  4. #4
    Membre habitué Avatar de DanielW33
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2006
    Messages : 327
    Points : 164
    Points
    164
    Par défaut
    Citation Envoyé par dvicente72
    ben dans ton pom.xml que tu veux valoriser tu positionnes une variable du type
    ${myvar}
    et quand tu lances archetype:create, tu rajoutes -Dmyvar=toto mais c'est à vérifier
    Cette idee ne fonctionne pas : deja tenté

    la deuxieme idee me parait plus interessante mais peux tu etre un peux plus clair ( et meme approfondir ) ???

  5. #5
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    l'archetype n'est pas obligé de "créer" le pom.xml si celui-ci se trouve déjà dans src/main/resources/archetype-resources

    donc tu peux très bien faire un pom.xml qui te sert de template que tu places dans src/main/resources/archetype-resources de ton archetype et celui-ci sera "filtré" à la création.

    Je me doutais bien que la première solution ne fonctionnerait pas, j'ai regardé le code du plugin archetype après avoir posté et effectivement ça ne fonctionne pas.

    DanielW33, plutôt que de poster des explications vaseuses, je te posterai demain matin à la fraîche le code de mon propre plugin archetype

    en gros l'idée est de faire mvn archetype:create -Darchetype.propertiesfile=c:\temp\myFile.properties

    ensuite dans le code du plugin archetype, tu positionnes une variable membre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /**
         * 
         * @parameter expression="${archetype.propertiesfile}"
         * @required
         */
        private File myproperties;
    ensuite tu fais un load via un objet Properties et ensuite tu itéres dessus pour ajouter chaque couple clé/valeur dans la Map d'attributs prévue à cette effet


    voilà en gros l'idée, ça te permet de passer autant de paramétres de substitution que tu veux pour créer ton archetype.


    si tu n'es pas trop pressé, je te poste le code source complet demain matin

  6. #6
    Membre habitué Avatar de DanielW33
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2006
    Messages : 327
    Points : 164
    Points
    164
    Par défaut
    Grand merci pour ton aide
    Si tu as un code source pour ca je peux attendre demain sans aucun probleme

  7. #7
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    et voilà le travail :

    maintenant tu peux avoir un fichier properties ou tu veux et tu fais ton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mvn myarchetypeplugin:create .... -Darchetype.propertiesfile=c:\temp\myapp.properties
    tu peux même virer les autres paramétres (artifactId etc..) et les mettre dans ton properties
    Fichiers attachés Fichiers attachés

  8. #8
    Membre habitué Avatar de DanielW33
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2006
    Messages : 327
    Points : 164
    Points
    164
    Par défaut
    Merci pour ce mojo
    Je vais etre un peu plus insistant : il me manque une classe : ArchetypeVgn

  9. #9
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    oui ça c'est l'interface de mon archetype spécifique à moi, je pense pas que tu en ais besoin,

    tu as juste à remplacer ArchetypeVgn par l'interface par défaut Archetype et hop

  10. #10
    Membre habitué Avatar de DanielW33
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2006
    Messages : 327
    Points : 164
    Points
    164
    Par défaut
    excuses moi, c'est ce que je viens de faire est hop ... je vais le tester

  11. #11
    Membre habitué Avatar de DanielW33
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2006
    Messages : 327
    Points : 164
    Points
    164
    Par défaut
    Bon alors c'est presque bon mais voila j'ai un autre probleme
    Je veux la creation d'un projet de type

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    monProjet : ${artifactId}
     |-- ${artifactId}
     |   |-- ${categorieId.1}		
     |   |   `-- pom.xml			 
     |   |-- ${categorieId.2}		
     |   |   `-- pom.xml			
     |   |-- sources
     |   |   |-- scripts
     |   |   |   |-- communs
     |   |   |   `-- communs.xml 
     |   |   |   |-- generation
     |   |   |   `-- generation.xml 
     |   |   |   |-- messages
     |   |   |   `-- messages.xml 
     |   |   |   |-- services
     |   |   |   `-- services.xml 
     |   |   `-- generate.xml   
     |   |   |-- src   
     |   |   |   `-- main
     |   |   |       `-- java
     |   |   |       `-- resources
     |   |   |-- src   
     |   |   |   `-- test
     |   |   |       `-- java
     |   |   |       `-- resources
     |   |   |-- generated   
     |   |   |   `-- main
     |   |   |       `-- java
     |   |   |       `-- resources
     |   |   |-- generated   
     |   |   |   `-- test
     |   |   |       `-- java
     |   |   |       `-- resources
     |   |   `-- build.xml
     |   |   `-- codegen.properties
     |   |   `-- pom.xml
     |-- databaseScripts
     |-- src
     |   `-- site
     |   |   `-- resources
     |   |   `-- docs
      `-- pom.xml
    avec un fichier de propriete contenant les proprietes de bases ( groupId, artifactId, version ) mais egalement un certain nombre de categories creant ainsi un repertoire par categorie, contenant chacun un fichier pom.xml et des propriétés devant remplacer des variables disseminées dans les differents fichiers present dans mon archetype

  12. #12
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    ben c'est là tout l'interêt d'avoir ta propre classe d'implémentation de l'archetype.

    avec dans ton plugin archetype, un fichier components.xml (sous src\main\java\resources\META-INF\plexus ) ou tu déclares l'interface et la classe d'implémentation

    par exemple
    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
     
    <component-set>
      <components>
        <component>
          <role>xxx.maven.plugin.archetype.ArchetypeVgn</role>
      <implementation>xxx.maven.plugin.archetype.DefaultArchetypeVgn</implementation>
          <requirements>
            <requirement>
              <role>org.codehaus.plexus.velocity.VelocityComponent</role>
            </requirement>
            <requirement>
              <role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
            </requirement>
            <requirement>
              <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
            </requirement>
          </requirements>
        </component>
      </components>
    </component-set>
    avec ArchetypeVgn qui est l'interface (tu re-pompes l'interface standard)

    et DefaultArchetypeVgn qui est ta classe d'implémentation de l'interface.

    Le mieux est de prendre la classe DefaultArchetype et de la modifier pour faire ce que tu veux.

    moi, perso , je devais utiliser des templates de fichier qui devaient porter comme nom l'artifactId.

    en fait, le fichier template portait le nom de la properties (un nom simple sans caractére spécifique) et ensuite dans la méthode processTemplate de ma classe DefaultArchetypeVgn , je fais un search/replace de la propriété par sa valeur sur le template manipulé

  13. #13
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    il faudrait aussi jeter un oeil sur le plugin archetypeng qui est en cours de migration de codehaus dans le sandbox vers Maven.

    il y a sûrement de bonnes idées à pomper pour faire ce que tu veux faire

  14. #14
    Membre habitué Avatar de DanielW33
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2006
    Messages : 327
    Points : 164
    Points
    164
    Par défaut
    Voila c'est bon j'ai fait le mojo qui me permet de faire ce que je veux.
    Merci dvicente72 pour ton aide precieuse.

    J'ai egalement jeté un oeil sur le lien que tu m'as donne (archetypeng ); c'est vrai que cela pouvais etre interessant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/02/2015, 12h48
  2. Maven : utiliser des tâches Ant ou pas ?
    Par Sandro Munda dans le forum Maven
    Réponses: 1
    Dernier message: 11/05/2010, 12h40
  3. Maven et Eclipse : utilisation des profils maven
    Par crawling5 dans le forum Maven
    Réponses: 5
    Dernier message: 09/01/2009, 15h52
  4. utilisation des profiles maven
    Par aymen83 dans le forum Maven
    Réponses: 1
    Dernier message: 06/01/2009, 00h01
  5. Utiliser des variables maven
    Par Frederik dans le forum Maven
    Réponses: 4
    Dernier message: 13/10/2008, 15h12

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