Вопрос

Когда я бегу maven install На моем Multi Module Maven Project я всегда получаю следующий вывод:

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

Итак, я немного гугул, но все, что я могу найти, это то, что я должен добавить:

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

... на мой pom.xml. Но это уже там (у родителей pom.xml).

Настройка <encoding> Для Maven-Resource-Plugin или плагина Maven-Compiler также не исправляет его.

Так в чем проблема?

Это было полезно?

Решение

Хорошо, я нашел проблему.

Я использую некоторые плагины отчетности. В документации от провала PUXAFE-Maven (http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html.) Я нашел, что <encoding> Конфигурация - конечно - использует ${project.reporting.outputEncoding} по умолчанию. Поэтому я добавил свойство как детский элемент project Элемент и все в порядке:

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

Смотрите также http://maven.apache.org/general.html#encoding-warning.

Другие советы

Это было бы в дополнение к предыдущему, если кто-то встречает проблему со скандивыми буквами, которые не решаются с решением выше.

Если файлы исходных файлов Java содержат скандистые буквы, которые необходимо правильно интерпретировать Java используется для компиляции. Отказ (например, скандистые буквы, используемые в константах)

Даже если файлы хранятся в UTF-8, и Maven настроен на использование UTF-8, система Java, используемая Maven, все равно будет использовать систему по умолчанию (например, в Windows: CP1252).

Это будет видно только запустить тесты через Maven (возможно, печатать значения этих констант в тестах. Напечатанные скандиические буквы будут отображаться как «<?>»), Если не тестируются правильно, это будет повреждено файлы классов в виде компиляции и будут осталось незамеченным.

Чтобы предотвратить это, вы должны установить Java используется для компиляции использовать кодировку UTF-8. Недостаточно иметь настройки кодирования в Maven Pom.xml, вам нужно установить переменную среды: java_tool_options = -dfile.encoding = utf8

Кроме того, если использование Eclipse в Windows, вам может потребоваться установить кодировку, используемую в дополнение к этому (если вы запускаете индивидуальный тест через Eclipse).

Если вы объедините ответы выше, наконец, настроен POM.xml для UTF-8, должен выглядеть так.

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>

Попробуй это:

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

Кажется, люди смешивают контент, кодирующие со встроенным кодировкой файлов / ресурсов. Наличие только свойства Maven недостаточно. Иметь -Dfile.encoding=UTF8 не эффективны. Чтобы избежать проблем с кодировкой, вы должны следовать следующим простым правилам

  1. Установите кодировку Maven, как описано выше:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  1. Всегда установите кодировку явно, при работе с файлами, строками, IO в вашем коде. Если вы не будете соблюдать это правило, ваше приложение зависит от окружающей среды. То -Dfile.encoding=UTF8 Точно отвечает за конфигурацию среды выполнения среды, но мы не должны зависеть от этого. Если у вас есть тысячи клиентов, требуется больше усилий для настройки систем и найти проблемы из-за этого. У вас просто дополнительная зависимость от этого, которую вы можете избежать, установив его прямо. Большинство методов в Java, которые используют кодировку по умолчанию, помечены как устаревшие из-за него.

  2. Убедитесь, что контент, с которым вы работаете, также находится в том же кодировании, что вы ожидаете. Если это не так, предыдущие шаги не имеют значения! Например, файл не будет обработан правильно, если его кодировка не UTF8, но вы ожидаете его. Чтобы проверить кодировку файлов на Linux:

$ file --mime f_prdauft.dsv

  1. Сила клиентов / серверных серверов явно закодировавшись в запросах / ответах, вот примеры:
@Produces("application/json; charset=UTF-8")
@Consumes("application/json; charset=UTF-8")

Надеюсь, это будет полезно для кого-то.

В моем случае я использовал maven-dependency-plugin Таким образом, чтобы решить проблему, которую мне пришлось добавить следующую собственность:

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

Видеть Плагин ресурсов Apache Maven / Указание схемы кодирования персонажей

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top