2014-06-10 13 views
47

Il mio obiettivo è creare un archetipo da un progetto.Perché Maven mi avvisa della codifica?

Quando eseguo un obiettivo che non coinvolge il Maven-archetipo-plugin, non riesco a vedere alcun avvertimento:

[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] 

Dall'altra parte, quando corro archetipo: creare-da-progetto , ho un paio:

[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 

so che il modo Maven "standard" è quello di utilizzare la proprietà project.build.sourceEncoding. Ho provato ad aggiungere altre proprietà al pom per risolvere questo problema, ma nessuno di loro ha funzionato.

Qualche idea? Grazie.

Ho il seguente pom.xml:

<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> 

risposta

13

Quando si esegue l'obiettivo archetype:create-from-project, Maven genera un file POM per la creazione dell'archetipo su target/generated-sources/archetype/pom.xml e quindi esegue l'obiettivo package (per impostazione predefinita) su questo POM.

Il file POM generato non ha project.build.sourceEncoding o qualsiasi altra proprietà che definisce la codifica ed è per questo che viene visualizzato l'avviso.

Il POM viene generato da this prototype per org.apache.maven.archetype.creator.FilesetArchetypeCreator#createArchetypeProjectPom e da tale codice non sembra essere un modo per aggiungere proprietà al file POM risultante.

71

non è stato impostato la proprietà encoding default in questo modo:

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

Questo approccio è migliore rispetto alla codifica definire manualmente per ogni plug-in, causa tutti i plug-in con valori predefiniti per encoding for example the 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} 

Quindi questo significa che è necessario solo definire questa proprietà e il plugin utilizzerà automaticamente questa codifica.

+1

L'ho impostato. Guarda il mio pom. Grazie –

+1

Puoi rimuovere le voci nelle configurazioni del plugin ' $ {encoding}'. – khmarbaise

+1

Ok. Ho aggiunto queste voci per vedere se il problema è stato risolto, ma senza fortuna –

6

Per rimuovere questo avviso se davvero non si desidera che l'accumulo di essere dipendente dalla piattaforma, è necessario specificare la codifica fonte di indipendente dalla piattaforma costruisce nel progetto Maven, eseguendo le seguenti operazioni:

  1. Aperto il file pom.
  2. aggiungere il seguente codice:

    <project> 
        ... 
        <properties> 
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
        </properties> 
        ... 
    </project> 
    
  3. Eseguire il seguente comando:

pacchetto mvn

  1. Si osservi che l'avviso non è più presente

Come funziona

La proprietà project.build.sourceEncoding specifica esplicitamente la codifica dei file di origine. I plugin Maven ottengono informazioni sulla codifica dal valore di questa proprietà e la usano. Questo valore sarà lo stesso su qualsiasi piattaforma su cui è basato il progetto e, quindi, la build diventa indipendente dalla piattaforma.

+1

project.build.sourceEncoding è già configurato nel mio pom –

+0

Il mio database è impostato per utilizzare uttf8mb4. Ma il mio pom.xml lancia questo avvertimento. Dovrei usare questa correzione? – user3705478

8

Ero seccato di vedere che Maven tenuti al lamentarsi dopo l'entrata sopra

poi ho capito che la sua il plugin fail-safe e ha bisogno di sua proprietà

così qui va

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
</properties 
+2

Queste proprietà sono già nel mio pom :( –

+0

Il mio database è impostato per utilizzare uttf8mb4 ma il mio pom.xml lancia questo avvertimento. Devo usare questa correzione? – user3705478