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オプションで呼び出されないことだと思います(-sectionでどのようUsing '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 に答える