web-dev-qa-db-fra.com

Pourquoi Maven m'avertit-il de l'encodage?

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]

À l’autre bout, lorsque je lance archétype: 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 méthode Maven "standard" consiste à utiliser le project.build.sourceEncoding propriété. J'ai essayé d'ajouter quelques propriétés supplémentaires au pom afin de résoudre ce problème, mais aucune d'entre 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>
67
Marco Ferrari

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.xml puis lance le but package (par défaut) sur ce POM.

Le fichier POM généré n'a pas project.build.sourceEncoding ou toute autre propriété définissant le codage, 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.

18
izstas

Vous n'avez pas défini la propriété encoding default comme ceci:

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

Cette approche est préférable à la définition manuelle de l'encodage pour chaque plug-in, car tous les plug-ins ont des valeurs par défaut pour encodant 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 que vous devez uniquement définir cette propriété et que le plug-in utilisera automatiquement cet encodage.

99
khmarbaise

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

Ensuite, j'ai réalisé que c'est le plug-in de sécurité et qu'il a besoin de sa propre propriété.

Alors voila

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties
19
Kalpesh Soni