在评论中使用无法映射的字符构建项目?

Build project with unmappable characters in comments?

我正在尝试从源代码构建 Android Permission Explorer。我用 svn checkout http://android-permission-explorer.googlecode.com/svn/ 查看了。我在签出项目后添加了一个基本的 build.xml,然后丢进了一个终端:

$ /usr/local/bin/ant release
...
-compile:
    [javac] Compiling 14 source files to .../android-permission-explorer/bin/classes
    [javac] .../android-permission-explorer/src/com/carlocriniti/android/permission_explorer/ApplicationDetail.java:7: error: unmappable character for encoding UTF-8
    [javac]  * Activit� d'affichage du d�tail d'une application
...

错误是unmappable character for encoding UTF-8

这是 ApplicationDetail.java 中的冒犯行(因为它是评论,所以对我来说毫无意义):

/*
 * Projet   : Permission Explorer
 * Auteur   : Carlo Criniti
 * Date     : 2011.06.10
 * 
 * Classe ApplicationDetail
 * ActivitÈ d'affichage du dÈtail d'une application
 * avec les permissions qu'elle utilise
 */

有多个这样的错误。如果 /usr/local/bin/ant release 2>&1 | grep -i error | wc -l 是准确的,那么就有 103 个。

问题:为什么评论中的字符会影响构建?

我已经在 Writing a Simple Buildfile and Property Task 上阅读了 ant 的文档,但该死的如果我能弄清楚如何设置源文件语言。

问题: 如何在build.xml中设置源文件语言?

即使在注释中,无效字符也会导致编译器错误:源代码通常在转换为字节码之前进行预处理,而编译器刚遇到一个字符未映射到其字符集。

最简单的方法是编辑源文件并将其保存为 UTF-8 编码。既然是注释,去掉这个字符应该也没什么坏处吧。

Manouti 提供了为什么 Java 没有忽略评论的答案。关于 Java 我能说的就是:愚蠢的想法。他们用一些不应该编译的东西破坏了编译过程。

要解决这种情况下的问题,javac 需要通过 java.encoding 指定的编码。最简单的方法似乎如下:

$ /usr/local/bin/ant -Djava.encoding=ISO-8859-1 release
Buildfile: …/android-permission-explorer/build.xml

-set-mode-check:

-set-release-mode:

-release-obfuscation-check:
     [echo] proguard.config is ${proguard.config}

-pre-build:

-check-env:
 [checkenv] Android SDK Tools Revision 24.0.2
 [checkenv] Installed at /opt/android-sdk-macosx

-setup:
     [echo] Project Name: Permission Explorer
  [gettype] Project Type: Application

-build-setup:
[getbuildtools] Using latest Build Tools: 21.1.2
     [echo] Resolving Build Target for Permission Explorer...
[gettarget] Project Target:   Android 2.2
[gettarget] API level:        8
     [echo] ----------
     [echo] Creating output directories if needed...
    [mkdir] Created dir: …/android-permission-explorer/bin/rsObj
    [mkdir] Created dir: …/android-permission-explorer/bin/rsLibs
     [echo] ----------
     [echo] Resolving Dependencies for Permission Explorer...
[dependency] Library dependencies:
[dependency] No Libraries
[dependency] 
[dependency] ------------------
[dependency] API<=15: Adding annotations.jar to the classpath.
     [echo] ----------
     [echo] Building Libraries with 'release'...
   [subant] No sub-builds to iterate on   

...
-dex:
      [dex] input: …/android-permission-explorer/bin/classes
      [dex] input: /opt/android-sdk-macosx/tools/support/annotations.jar
      [dex] Pre-Dexing /opt/android-sdk-macosx/tools/support/annotations.jar -> annotations-b850151b30962160fb610e078fc74448.jar
      [dex] Converting compiled files and external libraries into …/android-permission-explorer/bin/classes.dex...
       [dx] Merged dex A (37 defs/57.7KiB) with dex B (2 defs/1.1KiB). Result is 39 defs/66.6KiB. Took 0.1s

...
release:

BUILD SUCCESSFUL
Total time: 4 seconds

另一个有效的解决方案是使用以下内容修改项目的 build.xml 文件。

<project>
  ...
  <property name="java.encoding" value="ISO-8859-1" />
</project>