2012-02-02 4 views
2

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

В 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 

Когда Я бегу МВН в командной строке, можно добавить дополнительный параметр, но он появится после имя класса:

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 

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

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

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

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

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

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

+1

Ваш код, который использует JAXB работает во время сборки Maven, правильно? Кроме того, почему вы считаете, что эти символы читаются неправильно? Возможно, они просто не могут быть представлены в консольном выпуске. – axtavt

+0

Да, он работает во время сборки Maven. Я уверен, что эти символы читаются неправильно, потому что я использую объекты, не подверженные JAXB, для создания выходных файлов. Эти файлы верны, если они сгенерированы внутри IntelliJ, но не корректны при создании с консоли. Кроме того, если я запустил правильную команду с консоли, я могу видеть правильные символы на выходе консоли :) –

+0

Дубликат http: // stackoverflow.com/questions/1431008 –

ответ

1

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

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

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

0

Может быть, попробовать в том числе это 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> 
+0

Я пробовал это, но, к сожалению, это не помогает. На самом деле я заметил, что Maven уже использовал правильную кодировку, я вижу ее как журнал INFO. Я дважды проверял скопированный файл в ресурсах /, это правильно. Проблема возникает позже, когда мой плагин maven читает XML во время фазы генерации-источников. –

Смежные вопросы