Domanda

Quando eseguo maven install sul mio a più moduli Maven progetto che ho sempre trovato il seguente output:

[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!

Quindi, Ho cercato su google un po 'intorno, ma tutto quello che posso trovare è che devo aggiungere:

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

... alla mia pom.xml. Ma è già lì (nella pom.xml genitore).

Configurazione <encoding> per il Maven-risorse-plugin o l'esperto-compiler-plug, inoltre, non risolvere il problema.

Allora, qual è il problema?

È stato utile?

Soluzione

OK, ho trovato il problema.

Io uso alcuni plugin di reporting. Nella documentazione del fail-safe-Maven-plugin ( http: //maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html ) ho trovato, che la configurazione <encoding> - ovviamente - usi ${project.reporting.outputEncoding} per impostazione predefinita. Così ho aggiunto la proprietà come elemento figlio dell'elemento project e tutto è bene ora:

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

Si veda anche http://maven.apache.org/general.html#encoding-warning

Altri suggerimenti

Questo sarebbe in aggiunta al precedente, se qualcuno incontra un problema con le lettere Scandic che non è risolto con la soluzione di cui sopra.

Se i file sorgente Java contengono lettere Scandic hanno bisogno di essere interpretati correttamente dal Java utilizzato per la compilazione . (Lettere esempio scandic utilizzati nelle costanti)

Anche che i file sono memorizzati in UTF-8 e il Maven è configurato per utilizzare UTF-8, il Java System utilizzato dal Maven sarà ancora utilizzare il default del sistema (per esempio, in Windows:. CP1252).

Questa sarà visibile solo eseguire i test tramite Maven (eventualmente stampare i valori di queste costanti nelle prove. Le lettere Scandic stampati avrebbe mostrato come '') Se non testato correttamente, questo avrebbe corrotto i file di classe come risultato di compilazione ed essere lasciato inosservato.

Per evitare ciò, è necessario impostare la Java utilizzato per la compilazione per utilizzare la codifica UTF-8. Non basta avere le impostazioni di codifica del pom.xml Maven, è necessario impostare la variabile d'ambiente: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8

Inoltre, se si utilizza Eclipse in Windows, potrebbe essere necessario impostare la codifica utilizzata in aggiunta a questo (se si esegue prova individuale tramite eclissi).

Se si combinano le risposte di cui sopra, infine, un pom.xml che configurato per UTF-8 dovrebbe sembrare così.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>YOUR_COMPANY</groupId>
    <artifactId>YOUR_APP</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <properties>
        <project.java.version>1.8</project.java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <!-- Your dependencies -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>${project.java.version}</source>
                    <target>${project.java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Prova questo:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.7</version>
        <configuration>
          ...
          <encoding>UTF-8</encoding>
          ...
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>

Sembra che la gente si mescolano una codifica del contenuto con codifica di un file costruito / risorse. Avendo proprietà solo Maven non è sufficiente. Avere -Dfile.encoding=UTF8 non è efficace. Per evitare di avere problemi con la codifica è necessario seguire le seguenti regole semplici

  1. Imposta codifica Maven, come descritto in precedenza:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  1. Sempre impostare la codifica in modo esplicito, quando il lavoro con i file, le stringhe, IO nel codice. Se non si segue questa regola, l'applicazione dipendono dall'ambiente. Il -Dfile.encoding=UTF8 è esattamente responsabile della configurazione dell'ambiente di run-time, ma non dobbiamo dipendere da esso. Se si dispone di migliaia di clienti, ci vuole uno sforzo maggiore per i sistemi di configurazione e di trovare problemi a causa di esso. Non vi resta che una dipendenza aggiuntiva su di esso che si può evitare impostando in modo esplicito. La maggior parte dei metodi in Java che utilizzano una codifica predefinita vengono contrassegnati come deprecati a causa di esso.

  2. Assicurarsi che il contenuto, si sta lavorando, è anche nella stessa codifica, che ci si aspetta. Se non lo è, i passaggi precedenti non contano! Per esempio un file non saranno trattati in modo corretto, se la codifica non è UTF8 ma ci si aspetta che. Per controllare la codifica di file su Linux:

  

$ file --mime F_PRDAUFT.dsv

  1. Forza set client / server codifica esplicitamente richieste / risposte, qui sono un esempio:
@Produces("application/json; charset=UTF-8")
@Consumes("application/json; charset=UTF-8")

Spero che questo sarà utile a qualcuno.

Nel mio caso ho usato il maven-dependency-plugin così al fine di risolvere il problema ho dovuto aggiungere la seguente proprietà:

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

/ Specifica di un sistema di codifica dei caratteri Apache Maven Risorse Plugin

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top