Pourquoi Maven me prévient-il de l'encodage?


94

Mon objectif est de créer un archétype à partir d'un projet.

Lorsque je lance un objectif qui n'implique pas le plugin maven-archetype-plugin, je ne vois aucun avertissement:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-archetype-base ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-archetype-base ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]

De l'autre côté, lorsque j'exécute archetype: create-from-project, j'obtiens un couple:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-archetype-base-archetype ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 10 resources
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-archetype-base-archetype ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources

Je sais que la manière maven "standard" est d'utiliser la project.build.sourceEncodingpropriété. J'ai essayé d'ajouter quelques propriétés supplémentaires au pom afin de résoudre ce problème, mais aucune d'elles n'a fonctionné.

Des idées? Merci.

J'ai le pom.xml suivant:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.group.id</groupId>
<artifactId>my-artifact</artifactId>
<version>0.0.1</version>
<packaging>maven-archetype</packaging>

<properties>

    <!-- Compiler properties -->
    <maven.compiler.target>1.7</maven.compiler.target>
    <maven.compiler.source>1.7</maven.compiler.source>
    <encoding>UTF-8</encoding>
    <project.build.sourceEncoding>${encoding}</project.build.sourceEncoding>
    <project.reporting.outputEncoding>${encoding}</project.reporting.outputEncoding>
    <project.resources.sourceEncoding>${encoding}</project.resources.sourceEncoding>
    <archetype.encoding>${encoding}</archetype.encoding>

    <!-- Maven plugins version -->
    <maven-archetype-plugin-version>2.2</maven-archetype-plugin-version>
    <maven-resources-plugin-version>2.6</maven-resources-plugin-version>

    <!-- Maven extentions version -->
    <maven-archetype-packaging-extension-version>2.2</maven-archetype-packaging-extension-version>
</properties>
<dependencies>
[...]
</dependencies>

<build>
    <extensions>
        <extension>
            <groupId>org.apache.maven.archetype</groupId>
            <artifactId>archetype-packaging</artifactId>
            <version>${maven-archetype-packaging-extension-version}</version>
        </extension>
    </extensions>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>${maven-resources-plugin-version}</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-archetype-plugin</artifactId>
            <version>${maven-archetype-plugin-version}</version>
            <extensions>true</extensions>
        </plugin>

    </plugins>

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

Réponses:


18

Lorsque vous exécutez l'objectif archetype:create-from-project, Maven génère un fichier POM pour la construction de l'archétype sur target/generated-sources/archetype/pom.xmlpuis exécute l' packageobjectif (par défaut) sur ce POM.

Le fichier POM généré n'a project.build.sourceEncodingni aucune autre propriété définissant le codage, et c'est pourquoi vous obtenez l'avertissement.

Le POM est généré à partir de ce prototype par org.apache.maven.archetype.creator.FilesetArchetypeCreator#createArchetypeProjectPom, et à partir de ce code, il ne semble pas y avoir de moyen d'ajouter des propriétés au fichier POM résultant.


140

Vous n'avez pas défini la propriété par défaut d'encodage comme ceci:

<project>
  ...
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  ...
</project>

Cette approche est meilleure que de définir l'encodage manuellement pour chaque plugin, car tous les plugins ont des valeurs par défaut pour l' encodage, par exemple le maven-resources-plugin :

encoding:

The character encoding scheme to be applied when filtering resources.
Type: java.lang.String
Required: No
User Property: encoding
Default: ${project.build.sourceEncoding}

Cela signifie donc qu'il vous suffit de définir cette propriété et le plugin utilisera automatiquement cet encodage.


1
Je l'ai mis. Regardez mon pom. Merci
Marco Ferrari

1
Vous pouvez supprimer les entrées dans les configurations du plugin <encoding>${encoding}</encoding>.
khmarbaise

1
D'accord. J'ai ajouté ces entrées pour voir si le problème résolu, mais pas de chance
Marco Ferrari

Je ne comprends pas pourquoi la solution de secours utilise le codage de la plate-forme au lieu de UTF-8. Support hérité?
msa le

@msa car toutes les plates-formes n'ont pas UTF-8 par défaut. Exemple le plus simple de Windows.
khmarbaise le

33

J'étais ennuyé de voir que maven continuait à se plaindre après l'entrée ci-dessus

Ensuite, j'ai réalisé que c'était le plugin de sécurité et qu'il avait besoin de sa propre propriété

Alors voilà

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.