jeudi 15 septembre 2011

Changer les fichiers de configuration avec Maven

L'idée d'aujourd'hui est de pouvoir générer avec Maven des livrables contenant des fichiers de configuration correspondant à différents environnements.
Pour cela j'utilise les profils Maven et une petite tache Ant.

On commence par créer nos fichiers de configuration en les suffixant selon les profils. On a alors les fichiers conf.xml.dev et conf.xml.prd par exemple pour les environnements de développement (dev) et de production (prd).

Lorsque l'on demande à Maven de packager nos livrables, ils contiennent alors les deux fichiers.
La première étape est alors de faire en sorte de ne copier que la resource qui nous intéresse.
Pour cela nous déclarons les profils dans le fichier pom.xml du projet :
<profiles>
  <profile>
    <id>dev</id>
    <activation>
      <activebydefault>true</activebydefault>
    </activation>
    <properties>
      <maven.deployment.suffix>dev</maven.deployment.suffix>
    </properties>
  </profile>
  <profile>
    <id>prd</id>
    <properties>
      <maven.deployment.suffix>prd</maven.deployment.suffix>
    </properties>
  </profile>
</profiles>

Nous avons donc deux profils : "dev" et "prd". "dev" est le profil actif par défaut et les deux profils déclarent une propriété "maven.deployment.suffix".
Pour faire en sorte que Maven sélectionne le bon fichier, il faut configurer le plugin resource dans la section build du xml.
<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <includes>
        <include>**/*.xml</include>
        <include>**/*.xml.${maven.deployment.suffix}</include>
      </includes>
    </resource>
  </resources>
</build>
Il ne faut pas oublier d'inclure les autres types de fichiers à copier comme xml dans l'exemple mais aussi les fichiers properties et autres.

On constate alors que Maven a bien inclu dans le livrable le bon fichier mais notre fichier s'appelle conf.xml.dev au lieu de conf.xml. Pour avoir le fichier de l'environnement de production, il faut utiliser la commande mvn clean package -Pprd

C'est alors qu'intervient Ant, nous allons utiliser une tache Ant pour faire le renommage des fichiers. Pour cela nous allons ajouter le plugin Ant pour permettre l'exécution de la task move lors de la phase process-classes de Maven.
Dans la section build du pom.xml, on a alors :
<build>
  <plugins>
    <plugin>
      <artifactid>maven-antrun-plugin</artifactid>
      <executions>
        <execution>
          <phase>process-classes</phase>
          <configuration>
            <tasks>
              <echo message="Renommage des fichiers..." />
              <property name="maven.deployment.files" value="*.${maven.deployment.suffix}"/>
              <move overwrite="yes" todir="${project.build.directory}/classes" verbose="yes">
                <fileset dir="${project.build.directory}/classes">
                  <include name="**/${maven.deployment.files}"/>
                </fileset>
                <mapper from="${maven.deployment.files}" to="*" type="glob"/>
              </move>
              <echo message="Fin de renommage !"/>
            </tasks>
          </configuration>
          <goals>
            <goal>run</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
  
  <resources>
    .......
  </resources>
</build>

On a alors une copie des fichiers suffixés par le profil dans le même répertoire en utilisant un mapper qui renomme le fichier en supprimant le suffixe.

mercredi 27 juillet 2011

Hello World

Bonjour et bienvenue sur ce blog.

Je m'appelle Christophe Jollivet, j'ai 36 ans, je suis informaticien et j'aime la technique et le code.
Après cette introduction façon "codeur anonyme", j'assume mon amour du code. Je considère que le poste de chef de projet n'est pas l'évolution normale du métier de développeur mais un métier complètement différent qui fait appel à des compétences différentes.

Je dois faire une confession, je ne suis pas un "vrai informaticien". Ce que je veux dire par là, c'est que ma formation universitaire est un doctorat de neurobiologie et ce que l'on appelait à l'époque un DESS CCI ou Diplôme d'Etudes Supérieures Spécialisés (devenu Master 2) Compétences Complémentaires en Informatique. C'est à dire une formation ouverte à des non-informaticien avec des cours pendant 6 mois et un stage de 6 mois.

Par la suite j'ai travaillé dans le service informatique d'une entreprise de semences agricole pendant un an, j'ai fait un passage par un petit éditeur avant d'aller chez Apside TOP où je travaille depuis bientôt 6 ans.
Je suis aussi actif au niveau des communautés, j'ai été rédacteur et modérateur sur developpez.com, co-responsable de la rubrique Java avant de créer le Tours JUG que je mène toujours. Il m'arrive aussi de parler dans des JUG ou conférence. Enfin je fais des vacations en Faculté où j'enseigne Java EE en Master 2.


Ce blog sera donc un blog à orientation technique avec quelques réflexions sur le métier. Alors pourquoi un n-ième blog technique?
J'ai tendance à beaucoup expérimenter sur les frameworks et outils. Par la suite, dans la cadre du travail, il m'arrive de me dire : 
"j'ai déjà fait cela mais comment ?"
Quand j'étais en thèse, j'avais un "cahier de laboratoire" dans lequel je consignais mes différentes expérimentations et observations. Cela permettait par la suite de revenir dessus et comparer pour l'écriture d'article et de mon mémoire.

L'idée de ce blog est donc de reproduire cette pratique que j'avais oublié. Il s'agira de mon carnet de labo dans lequel je consignerai des expériences et leurs résultats ainsi que des réflexions/observations.
Vous ne trouverez sans doute pas de grand morceaux de code révolutionnaire encore vu nulle part. Vous trouverez plutôt ces petit morceaux de code que l'on recherche régulièrement sur le web, des POC sur mes expérimentations et quelques réflexions.

En espérant que certains morceaux pourront vous servir à vous aussi.