我正在使用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-sun和openjdk。
任何人都可以让我知道该怎么做。
谢谢
答案 0 :(得分:65)
配置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中执行此操作,您可以右键单击项目并选择Properties-&gt; Resource-&gt; Text File Encoding并将其更改为UTF-8。这将以UTF-8编码所有源文件。 (您还应该如上所述显式配置maven-compiler-plugin以使用UTF-8编码。)在源文件和编译器插件都使用相同的编码时,编译期间不应再有任何不可映射的字符。
注意,您还可以通过Window-&gt; Preferences-&gt; General-&gt; Workspace-&gt; Text File Encoding在eclipse中全局设置文件编码。您还可以通过Window-&gt; Preferences-&gt; General-&gt; Content Types设置每种文件类型的编码。
答案 1 :(得分:20)
如果上述答案不起作用,请将编码更改为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操作系统(Ubuntu)。
答案 2 :(得分:10)
我刚才遇到了这个问题并最终解决了它:我在Notepad ++中打开了违规的.java文件,并从编码菜单中选择了“转换为没有BOM的UTF-8”。保存。重新跑了maven,都经历好了。
如果违规资源未以UTF-8编码 - 正如您为maven编译器插件配置的那样 - 您会在Np ++的编码菜单中看到文件的当前编码旁边的项目符号(就我而言,我看到它被设置为“用ANSI编码”)。
因此,您的maven编译器插件使用-encoding选项设置为UTF-8调用Java编译器,但编译器遇到ANSI编码的源文件并将其报告为错误。这曾经是Java 5中的警告,但在Java 6 +
中被视为错误答案 3 :(得分:7)
在以下情形中会发生这种情况: 在Windows上工作时,IDE很可能配置为编辑Cp1252中的文件,这是微软改编的latin-11。开发人员签入,持续集成服务器(通常在Linux上运行,现在全部是utf8)获取文件,并尝试编译为UTF-8文件,因此警告。
尝试将编码更改为 cp1252 。这有效。为避免此类问题,请在所有开发人员计算机上使用相同的编码。
祝你好运......答案 4 :(得分:3)
在我的情况下,我使用这种方法解决了这个问题:
JAVA_TOOL_OPTIONS = -Dfile.encoding=UTF8
MAVEN_OPTS= -Dfile.encoding=UTF-8
答案 5 :(得分:1)
我也面临类似的问题,我的解决方案也不同。我去了提到的代码行并遍历了角色(For SpanishTest.java [31,81],转到第31行和第81个字符,包括空格)。我在评论中发现了一个引起问题的撇号。虽然不是一个错误,maven编译器报告问题,在我的情况下,有可能删除maven的“非法”字符..大声笑。
答案 6 :(得分:1)
当我检查控制台时,我发现maven编译器的版本是2.5.1,但在另一方面,我尝试使用maven 3.2.2.So在pom.xml中编写确切版本后构建我的项目,它运行良好。 这是完整的标签:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
....
<configuration>
</plugin>
答案 7 :(得分:0)
在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>
答案 8 :(得分:0)
我猜问题出在编码字符串上。我解决了同样的问题。请尝试在编码字符串的最后添加trim()。