Компиляция MVN, не использующая кодировку UTF-8

хорошо, это странная проблема: У меня есть тестовый файл Java, который использует некоторые символы UTF-8. Когда я компилирую его с Maven, используя

mvn -Dfile.encoding=UTF-8 -Dproject.build.sourceEncoding=UTF-8 test

(таким образом, устанавливая как воспринимаемую кодировку платформы, так и кодировку исходного файла, см. кодировка платформы maven) Я получаю что-то вроде

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building project
[INFO]    task-segment: [test]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory path/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory path/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 7 source files to path/target/test-classes
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
path/to/file.java:[42,23] unclosed character literal
path/to/file.java:[42,25] ';' expected
path/to/file.java:[42,26] unclosed character literal
path/to/file.java:[47,23] unclosed character literal
path/to/file.java:[47,25] illegal character: 2
path/to/file.java:[47,26] unclosed character literal

когда я компилирую файл с

javac path/to/file.java

Я получаю подобные ошибки:

path/to/file.java:42: unclosed character literal
    illegalCharEnc('ä');
                   ^
path/to/file.java:42: ';' expected
    illegalCharEnc('ä');
                     ^
path/to/file.java:42: unclosed character literal
    illegalCharEnc('ä');
                      ^
path/to/file.java:47: unclosed character literal
    illegalCharDec('ö');
                   ^
path/to/file.java:47: illegal character: 2
    illegalCharDec('ö');
                     ^
path/to/file.java:47: unclosed character literal
    illegalCharDec('ö');
                      ^
6 errors

теперь, когда я использую

javac -encoding UTF-8 path/to/file.java
, Я cannot find symbol ошибки, из-за отсутствующих зависимостей. Поэтому я считаю, что проблема в том, что javac не вызывается с опцией UTF-8 в Maven при компиляции тестов (обратите внимание, как Using 'UTF-8' encoding to copy filtered resources. отсутствуют compiler:testCompile-разделе). Правильно ли это заключение? Я что-то упускаю? Это известная проблема? Я могу что-нибудь сделать? Очевидно, что кодировка платформы в моей системе не UTF-8, но в настоящее время я не могу это изменить.

2 ответов


имея ту же проблему, я столкнулся с этим вопросом первым. Но так как ответа не было, я посмотрел дальше и нашел другой вопрос, на который был дан ответ и помог мне решить это:

https://stackoverflow.com/a/10375505/332248 (кредит @chrisapotek и @Jopp Эгген за ответы)


плагин компилятора Maven, принимает кодировку в качестве параметра конфигурации. Не только UTF-8, но различные стандарты кодирования поддерживаются.,

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