9

好的,这是一个奇怪的问题:我有一个使用一些 UTF-8 字符的 java 测试文件。当我用 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: \182
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: \182
    illegalCharDec('ö');
                     ^
path/to/file.java:47: unclosed character literal
    illegalCharDec('ö');
                      ^
6 errors

现在当我使用

javac -encoding UTF-8 path/to/file.java

相反,cannot find symbol由于缺少依赖项,我得到了错误。所以我认为问题是javac在编译测试时没有在 Maven 中使用 UTF-8 选项调用它(注意-sectionUsing 'UTF-8' encoding to copy filtered resources.中的缺失方式compiler:testCompile)。这个结论正确吗?我错过了什么吗?这是一个已知问题吗?我能做些什么吗?显然,我系统上的平台编码不是 UTF-8,但我目前无法更改。

4

2 回答 2

20

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>
于 2014-04-11T06:35:54.597 回答
7

遇到同样的问题,我首先遇到了这个问题。但由于没有答案,我进一步看了看,发现另一个问题得到了回答并帮助我解决了这个问题:

https://stackoverflow.com/a/10375505/332248(感谢@chrisapotek 和@Jopp Eggen 的回答)

于 2013-03-08T09:17:58.003 回答