Ошибка: не отображаемый символ для кодировки UTF8 во время компиляции Maven - PullRequest
51 голосов
/ 24 января 2012

Я компилирую пакет, используя maven, и он говорит об ошибке сборки с последующей ошибкой компиляции:

SpanishTest.java [31, 81] не отображаемый символ для кодировки UTF8

Я искал в Интернете, и для многих людей изменение исходной кодировки с UTF-8 на ISO-8859-1, похоже, работает, но я все еще получаю ту же ошибку компиляции. Я использую 32-битную Ubuntu. Вот как этот тег выглядит в моем pom.xml

<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>

Даже если я поменяю тег <project.build.outputEncoding> на ISO-8859-1, я все равно получаю сообщение об ошибке. Может ли это быть из-за версии Java? В моей системе установлены и Sun-java, и openjdk.

Может кто-нибудь, пожалуйста, дайте мне знать, что делать.

Спасибо

Ответы [ 8 ]

68 голосов
/ 24 января 2012

Сконфигурируйте плагин maven-compiler-plugin для использования той же кодировки символов, в которую кодируются ваши исходные файлы (например):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

Многие плагины maven по умолчанию будут использовать "project.build.sourceEncoding"свойство, поэтому установка этого в вашем pom покроет большинство плагинов.

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

Однако я предпочитаю устанавливать кодировку в конфигурации каждого плагина, которая поддерживает его, так как мне нравится быть явным.

Когдаваш исходный код компилируется плагином maven-compiler, файлы исходного кода считываются плагином компилятора с использованием любой кодировки, с которой настроен плагин компилятора.Если ваши исходные файлы имеют кодировку, отличную от используемой плагином компилятора, возможно, что некоторые символы могут отсутствовать в обеих кодировках.

Многие люди предпочитают установить кодировку в своих исходных файлах на UTF-8, чтобыкак избежать этой проблемы.Для этого в Eclipse вы можете щелкнуть правой кнопкой мыши по проекту и выбрать «Свойства» -> «Ресурс» -> «Кодировка текстового файла» и изменить его на UTF-8.Это закодирует все ваши исходные файлы в UTF-8.(Вам также следует явно настроить плагин maven-compiler-plugin, как упомянуто выше, для использования кодировки UTF-8.) Если исходные файлы и плагин компилятора используют одинаковую кодировку, во время компиляции не должно быть больше не отображаемых символов.

Примечание. Вы также можете установить глобальную кодировку файла в Eclipse через Window-> Preferences-> General-> Workspace-> Text File Encoding.Вы также можете установить кодировку для каждого типа файла через Window-> Preferences-> General-> Content Types.

20 голосов
/ 17 августа 2012

Если приведенный выше ответ не работает, измените кодировку на cp1252 или вручную удалите все вхождения специального символа. Для меня специальный символ вызывал проблему, которая была внутри блока комментариев.

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <version>2.3.2</version>
   <configuration>
       <encoding>Cp1252</encoding>
   </configuration> 
</plugin>

PS: я использовал ОС GNU / Linux (Ubuntu).

10 голосов
/ 07 мая 2013

Я только что столкнулся с этой проблемой и в итоге решил ее следующим образом: я открыл оскорбительный файл .java в Notepad ++ и в меню «Кодирование» выбрал «Преобразовать в UTF-8 без спецификации».Сохраненный.Перезапустил мавен, все прошло нормально.

Если ресурс-нарушитель не был закодирован в UTF-8 - как вы настроили для своего подключаемого модуля компилятора maven - в меню Кодировка Np ++ вы увидите маркер рядом с current * 1004 файла* кодирование (в моем случае я видел, что для него установлено значение «Кодировать в ANSI»).

Таким образом, ваш плагин для компилятора maven вызвал компилятор Java с параметром -encoding, установленным в UTF-8, но компилятор обнаружилANSI-кодированный исходный файл и сообщил об этом как об ошибке.Раньше это было предупреждением в Java 5, но в Java 6 это воспринималось как ошибка + + 1007 *

7 голосов
/ 07 июня 2013

Это происходит в следующем сценарии: при работе в Windows IDE, скорее всего, настроен на редактирование файлов в Cp1252, что является адаптацией Microsoft к латинице-11.Разработчик регистрируется, и сервер Continuous Integration (обычно работающий в Linux, в настоящее время все это utf8) выбирает файл и пытается скомпилировать как файл UTF-8, отсюда и предупреждение.

Попробуйте изменитькодировка cp1252 .Это работает.Чтобы избежать подобных проблем в будущем, используйте одну и ту же кодировку на всех машинах разработчика.

Удачи ...

3 голосов
/ 15 августа 2017

В моем случае я решил эту проблему, используя такой подход:

  1. Установить новую переменную среды: JAVA_TOOL_OPTIONS = -Dfile.encoding=UTF8
  2. или установить MAVEN_OPTS= -Dfile.encoding=UTF-8
1 голос
/ 09 сентября 2016

Когда я осмотрел консоль, я обнаружил, что версия компилятора maven - 2.5.1, но с другой стороны, я пытаюсь построить свой проект с помощью maven 3.2.2. Так что после записи точной версии в pom.xml, она работает хорошо,Вот полный тег:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.2</version>
  <configuration>
   ....
  <configuration>
</plugin>
1 голос
/ 07 февраля 2014

Я тоже столкнулся с подобной проблемой, и мое разрешение было другим.Я перешел к упомянутой строке кода и перешел к символу (для SpanishTest.java [31, 81] перейдите к 31-й строке и 81-му символу, включая пробелы).Я заметил апостроф в комментарии, который вызвал проблему.Хотя это и не ошибка, компилятор maven сообщает о проблеме, и в моем случае удалось удалить «нелегальный» символ maven .. lol.

0 голосов
/ 11 сентября 2018

Установить атрибут incodign в работе плагина maven-compiler для меня. Пример кода следующий

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>
...