web-dev-qa-db-ja.com

エラー:Mavenコンパイル中にUTF8をエンコードするためのマッピングできない文字

私はmavenを使用してパッケージをコンパイルしていますが、次のコンパイルエラーでビルドが失敗したと言います:

SpanishTest.Java [31、81] UTF8エンコード用のマップ不可文字

オンラインで検索したところ、多くの人がソースエンコーディングをUTF-8からISO-8859-1に変更したようですが、同じコンパイルエラーが発生します。 32ビットUbuntuを使用しています。 pom.xmlでそのタグがどのように見えるかを以下に示します

<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>

<project.build.outputEncoding>タグをISO-8859-1に変更しても、エラーが発生します。Javaバージョンのせいでしょうか? Sun Javaとopenjdkの両方がシステムにインストールされています。

誰でも私に何をすべきか教えてください。

ありがとう

51
Yogesh

ソースファイルがエンコードされているのと同じ文字エンコードを使用するようにmaven-compiler-pluginを構成します(例):

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

多くのmavenプラグインはデフォルトで「project.build.sourceEncoding」プロパティを使用するため、pomでこれを設定するとほとんどのプラグインがカバーされます。

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

ただし、明示的にしたいので、各プラグインの構成でそれをサポートするエンコーディングを設定することを好みます。

ソースコードがmaven-compiler-pluginによってコンパイルされると、コンパイラプラグインが設定されているエンコーディングを使用して、コンパイラプラグインによってソースコードファイルが読み込まれます。ソースファイルがコンパイラプラグインが使用しているものとは異なるエンコーディングを持っている場合、いくつかの文字が両方のエンコーディングに存在しない可能性があります。

多くの人は、この問題を回避するために、ソースファイルのエンコーディングをUTF-8に設定することを好みます。 Eclipseでこれを行うには、プロジェクトを右クリックして[プロパティ]-> [リソース]-> [テキストファイルエンコーディング]を選択し、UTF-8に変更します。これにより、すべてのソースファイルがUTF-8でエンコードされます。 (上記のようにUTF-8エンコーディングを使用するようにmaven-compiler-pluginを明示的に設定する必要もあります。)ソースファイルとコンパイラプラグインの両方が同じエンコーディングを使用している場合、コンパイル中にマッピングできない文字はありません。

また、Window-> Preferences-> General-> Workspace-> Text File Encodingを使用して、Eclipseでファイルエンコーディングをグローバルに設定することもできます。 Window-> Preferences-> General-> Content Typesを使用して、ファイルタイプごとにエンコーディングを設定することもできます。

68
BenjaminLinus

上記の答えが機能しない場合は、エンコードをcp1252に変更するか、特殊文字の出現をすべて手動で削除してください。私にとって、特殊文字がコメントブロック内にある問題を引き起こしていました。

<plugin>
   <groupId>org.Apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <version>2.3.2</version>
   <configuration>
       <encoding>Cp1252</encoding>
   </configuration> 
</plugin>

PS:GNU/Linux OS(Ubuntu)を使用していました。

20
false9striker

私はちょうどこの問題に出くわし、次のように解決しました:問題のある.JavaファイルをNotepad ++で開き、エンコードメニューから[BOMなしでUTF-8に変換]を選択しました。保存しました。 mavenを再実行し、すべてが正常に完了しました。

問題のリソースがUTF-8でエンコードされていない場合-mavenコンパイラプラグイン用に設定したように-Np ++の[エンコード]メニューに、ファイルのcurrent encoding(my私が見た場合、「ANSIでエンコード」に設定されていました)。

そのため、mavenコンパイラプラグインは、-= encodingオプションをUTF-8に設定してJavaコンパイラを呼び出しましたが、コンパイラはANSIエンコードされたソースファイルを検出し、これをエラーとして報告しました。以前はJava 5であったが、Java 6+でエラーとして扱われる

10
Peter Perháč

これは、次のシナリオで発生します。Windowsで作業する場合、IDEは、ラテン11のMicrosoftの適応であるCp1252でファイルを編集するように設定される可能性が高くなります。継続的インテグレーションサーバー(現在はすべてutf8であるLinux上で通常実行されている)がファイルを取得し、UTF-8ファイルとしてコンパイルしようとするため、警告が表示されます。

エンコードをcp1252に変更してみてください。これは動作します。この種の将来の問題を回避するには、すべての開発者マシンで同じエンコードを使用します。

幸運を...

7
James

私の場合、このようなアプローチを使用して問題を解決しました。

  1. 新しい環境変数を設定します:Java_TOOL_OPTIONS = -Dfile.encoding=UTF8
  2. またはMAVEN_OPTS= -Dfile.encoding=UTF-8を設定します
3
BSeitkazin

コンソールを調べると、mavenコンパイラのバージョンは2.5.1であることがわかりましたが、反対側ではmaven 3.2.2でプロジェクトをビルドしようとしています。完全なタグは次のとおりです。

<plugin>
  <groupId>org.Apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.2</version>
  <configuration>
   ....
  <configuration>
</plugin>
1
TinyOS

私も同様の問題に直面し、私の解像度は異なっていました。上記のコード行に移動し、その文字に移動しました(SpanishTest.Java [31、81]の場合、31行目とスペースを含む81番目の文字に移動します)。この問題の原因となったアポストロフィをコメントで観察しました。間違いではありませんが、mavenコンパイラーが問題を報告し、私の場合、mavenの「違法」文字を削除することができました。

1

Maven-compilerプラグインでincodign属性を設定してください。コード例は次のとおりです

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>
0