Проблема кодирования при сборке с mvn - PullRequest
2 голосов
/ 02 февраля 2012

В настоящее время я работаю над плагином Maven, который использует JAXB.Проблема в том, что, запускаю ли я чистую установку в IntelliJ или в консоли, я не получаю одинаковых результатов.JAXB читает файл XML, закодированный в UTF-8, который содержит специальные символы.

В IntelliJ эти символы читаются без проблем.Но в консоли эти символы заменены на '?'(Я могу видеть это, если я делаю sysout).

Я нашел источник своей проблемы, но я действительно не понимаю ее, и я не знаю, как ее решить: когда IntelliJ запускает mvn,он добавляет дополнительный параметр -Dfile.encoding=UTF-8

java -classpath /usr/share/maven/boot/plexus-classworlds-2.4.jar -Dclassworlds.conf=/usr/share/maven/bin/m2.conf -Dmaven.home=/usr/share/maven -Dfile.encoding=UTF-8 org.codehaus.plexus.classworlds.launcher.Launcher clean install

Когда я запускаю mvn в командной строке, я могу добавить этот дополнительный параметр, но он появится после имени класса:

java -classpath /usr/share/maven/boot/plexus-classworlds-2.4.jar -Dclassworlds.conf=/usr/share/maven/bin/m2.conf -Dmaven.home=/usr/share/maven org.codehaus.plexus.classworlds.launcher.Launcher -Dfile.encoding=UTF-8 clean install

В обоих случаях, если я использую содержимое System.getProperty("file.encoding"), я получаю то же значение "UTF-8", но другое поведение.

Конечно, я правильно настроил свой pom.xmlиспользуя свойство, подобное этому:

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

Я также пытался добавить второе свойство с именем "file.encoding", но это не помогает.

Мой вопрос: почему позиция этого системного свойства меняет поведение моей программы и как я могу исправить мою проблему, когда запускаю mvn из командной строки?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 04 июня 2012

Как указано в прочее вопросов , JVM запускается с кодировкой файлов по умолчанию (обычно системной кодировкой файлов), которая используется каждый раз, когда устройства чтения и записи используются без явной кодировки , Переопределение системного свойства file.encoding во время выполнения не меняет этого поведения, вам действительно нужно указать -Dfile.encoding при запуске JVM, если вы хотите, чтобы это была кодировка по умолчанию.

Чтобы исправить мою проблему, я повторно использовал project.build.sourceEncoding в своем плагине Maven (у меня была эта проблема в пользовательском плагине), чтобы переопределить file.encoding во время выполнения, и использовать этот file.encoding для создания экземпляра InputStreamReader и OutputStreamWriter с явным кодированием в качестве 2-го параметра.

Поскольку ресурсы были правильно скопированы плагином maven-resource-plugin в UTF-8, моя проблема исчезла: D.

0 голосов
/ 02 февраля 2012

Возможно, попробуйте включить этот XML в ваш файл pom.xml:

<project>
  [...]
  <build>
    [...]
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.4.3</version>
      <configuration>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>

    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.3.2</version>
      <configuration>
        <source>1.6</source>
        <target>1.6</source>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
  </build>
</project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...