Change the Google App Engine's Javac Compiler Encoding
Google App Engine 自带的javac编译器默认是使用操作系统的编码,在Windows系统下常常会将jsp文件内容编译为乱码,通用情况下我们都采用UTF-8的统一编码,如何才能改变Google App Engine 自带的javac编译器编码呢?
主要采用如下几个步骤:
1.下载 Google App Engine SDK for java
2. 解压后在lib目录里面有一个appengine-tools-api.jar文件,解压提取出com.google.appengine.tools.admin.Application.class,通过jd-gui或jad反编译后,可以看到如下代码片段(红色部分为本人所加内容):
private void compileJavaFiles(String classpath, File classDir, AppAdminFactory.ApplicationProcessingOptions opts) throws IOException{ statusUpdate("Compiling java files."); ArrayList args = new ArrayList(); String javacCmd = opts.getJavaCompiler().getPath(); args.add(javacCmd); args.add("-encoding"); args.add("UTF-8"); args.add("-classpath"); args.add(classpath.toString()); args.add("-d"); args.add(classDir.getPath()); for (Iterator i$ = new FileIterator(classDir).iterator(); i$.hasNext(); ) { File f = (File)i$.next(); if (f.getPath().toLowerCase().endsWith(".java")) args.add(f.getPath()); } if (args.size() == 7) return; Process javac = startProcess((String[])args.toArray(new String[0])); int status = 1; try { status = javac.waitFor(); } catch (InterruptedException ex) { } if (status != 0) throw new RuntimeException("Failed to compile java files."); }
3. 将更改后的Application.java再重新编译为Application.class替换appengine-tools-api.jar中的Application.class,即可解决Google App Engine 自带的javac编译器的编码问题;
需要注意的几点:
1. 通过jd-gui或jad反编译时,并不能100%的保证Application.java源代码的正确性,本人是通过jd-gui与jad两者反编译再对比分析修改后才得到正确的Application.java源代码,为了免去大家反编译Application.class的麻烦,本人将Application.java与反编译好的Applcation.class发布到了网上供大家下载
下载 Application.java Application.class appengine-tools-api.jar (JDK6编译)
2.为了避免编码带来的烦恼,建议大家在appengine-web.xml中的system-properties节点中加入如下代码:
<property name="file.encoding" value="UTF-8"/> <property name="DEFAULT_ENCODING" value="UTF-8"/>