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 :

Accès à un fichier depuis n'importe quel (sous)modules


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 Accès à un fichier depuis n'importe quel (sous)modules
    Bonjour,

    J'ai un projet multi-modules (à plusieurs niveaux), dont la structure est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    main-project/
        module1/
        module2/
            sous-module1/
            sous-module2/
            sous-module3/
            ...
        module3/
        module4/
        ...
    J'ai besoin de définir un ensemble de propriétés (qui sont dépendantes de l'environnement destiné à la release) à Maven. Je ne souhaite pas utiliser les <properties> directement, vu que j'ai pas mal de propriétés à définir. De fait, j'utilise le plugin Properties de Codehaus, qui permet de lire un fichier properties...
    Ce fichier properties se situe au niveau du répertoire racine, à savoir main-project.
    Mon souci, c'est que je n'arrive pas à lui indiquer un chemin d'accès qui soit valable pour chaque module et sous-module.
    Mon pom :

    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
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-1</version>
        <executions>
            <execution>
                <phase>initialize</phase>
                <goals>
                    <goal>read-project-properties</goal>
                </goals>
                <configuration>
                    <files>
                        <file>???/env_${env}.properties</file>
                    </files>
                </configuration>
            </execution>
        </executions>
    </plugin>
    Si je définis <file>env_${env}.properties</file>, alors le plugin Properties va réussir à trouver le fichier quand Maven2 construira le pom parent, mais dès que l'on passe à un module, il ne le trouvera plus !
    Pareillement, si je mets <file>../env_${env}.properties</file>, alors si c'est bon pour les modules, ce ne sera pas bon pour le pom parent ou encore les sous-modules...

    Donc j'ai 2 options :

    • Soit j'arrive à définir une propriété pointant toujours sur le répertoire basedir du pom principal
    • Soit je trouve une autre solution pour charger ces propriétés...

    Une idée ?
    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 confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2008
    Messages : 33
    Par défaut
    Je te donne une idée qui me vient comme ça, elle vaut ce qu'elle vaut.
    Tu peux peut être définir une propriété dans ton pom parent qui prend comme valeur ${basedir}.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <main.project.basedir>${basedir}</main.project.basedir >
    Tes pom de modules et sous modules auront donc la valeur du répertoire de main_project et devrait trouver tes fichiers de properties.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <file>${main.project.basedir }/env_${env}...</file>

  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 : 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
    Merci pour l'idée, j'avais également pensé à utiliser cette "ruse".
    Hélas, la propriété main-project-basedir, bien que définie uniquement dans le pom.xml parent, est réactualisée à chaque fois.
    Ainsi, main-project-basedir au niveau pom parent vaudra par exemple "C:\toto\projet\", mais dans le module1, il vaudra "C:\toto\projet\module1" !

    D'autres pistes ?
    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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2008
    Messages : 33
    Par défaut
    Arf je m'en douté un peu. J'ai bien une autre idée, mais nettement moins esthetique : c'est de mettre en 'flat' tout ton projet c'est à dire d'avoir tous les modules au même niveau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    main_project
    module1
    sousmodule1
    sousmodule2
    sousmodule3
    module2
    module3
    Dans les pom de tes modules parents, tu déclares les modules enfants comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <module>../sousmodule1</module>
    <module>../sousmodule2</module>
    <module>../sousmodule3</module>
    Ainsi tu peux utiliser tout le temps le chemin vers ton main module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <file>../main_project/env-${env}...</file>

  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
    Alors cette solution ne me plait pas du tout... D'autant que j'ai demandé un CVS move de toute une partie de mon application, donc je ne vais pas m'amuser à refaire ça. En plus, c'est très laid

    Je pense que je vais essayer de setter moi même toutes les propriétés en utilisant un plugin qui me permet de faire du groovy dans le pom.xml. Un peu comme Gregory me l'avait proposé pour un autre problème...
    Loin d'être une solution ultime, mais à défaut de mieux...

    Je testerais ça lundi, je vous dirais si ça marche.
    En attendant, si vous avez d'autres pistes...
    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
    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
    Bon, comme on est lundi (si si), j'ai testé (bon, en fait j'étais trop curieux pour voir si ça marchait).

    J'ai donc fait ainsi :

    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
    44
    45
        <plugin>
            <groupId>org.codehaus.groovy.maven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <version>1.0-rc-5</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <source>
                            import java.io.File;
                            String p = project.properties['env-properties-file'];
                            File f = new File(p); 
                            if (!f.exists()) {
                                f = new File("../" + p);
                                if (!f.exists()) {
                                    f = new File("../../" + p);
                                }
                            }
                            project.properties['env-properties-file-by-groovy'] = f.getAbsolutePath();
                    </source>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-1</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>${env-properties-file-by-groovy}</file>
                        </files>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    et ça marche correctement. C'est pas over-le-top, mais ça marche...
    Donc si quelqu'un a une meilleure solution plus propre, je suis prenneur !
    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

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/06/2011, 16h30
  2. Réponses: 11
    Dernier message: 09/12/2010, 11h32
  3. Réponses: 5
    Dernier message: 12/09/2007, 09h18
  4. Accès à un fichier depuis une procédure stockée
    Par greg75 dans le forum Sybase
    Réponses: 2
    Dernier message: 09/03/2007, 10h02
  5. comment zipper un fichier de n'importe quel extension
    Par diamonds dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 23/02/2007, 23h09

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