lundi 12 août 2013

Fichier de propriétés Maven mal encodé. [1/2]

Avec Maven, il est possible de spécifier un fichier de propriétés qui sera utilisé par la suite pour faire du filtrage de fichiers.
Ce fichier, contient la liste des variables à valoriser.

Par exemple, si dans le fichier local.properties, il y a :
titre=En cours de création

Dans le fichier à substituer label.properties, le contenu est le suivant :
monLabel=${titre}

Les deux fichiers sont encodés en UTF8.
Dans le pom.xml, l'encodage est spécifié par :
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties>

Une fois substitué, le résultat du fichier est :
En cours de création

Il y a donc un problème d'encodage mais où ?

Pour faire simple, le filtering jusqu'à Maven 3.0.x en tout cas se fait via la librairie "maven-filtering".
Et si on regarde le code, classe PropertyUtils méthode loadPropertyFile (c'est cette méthode qui est appelé pour le filtering), on a :
public static Properties loadPropertyFile( File propFile, Properties baseProps )
    throws IOException
{
    if ( !propFile.exists() )
    {
        throw new FileNotFoundException( propFile.toString() );
    }
    final Properties fileProps = new Properties();
    final FileInputStream inStream = new FileInputStream( propFile );
    ....

Il n'est pas prévu de pouvoir spécifier un encodage en particulier pour les fichiers contenant les variables qui devront être filtrés.
Le fichier est ouvert avec l'encodage par défaut de la JVM.

Le soucis, est que si lors du lancement de Maven, on ajoute l'option de la JVM -Dfile.encoding=UTF8 cela ne fonctionne pas.
Pourquoi ?
J'y reviendrais dans un autre billet.

Ticket sur le plugin maven ressource sur ce sujet : https://jira.codehaus.org/browse/MRESOURCES-175

Aucun commentaire:

Enregistrer un commentaire