为方便构建、打包项目,项目准备采用ant来构建,但在执行compile的target时,发现javac无法编译GXT的部分代码,例如:

  1. import  com.extjs.gxt.ui.client.data.BaseModel; 
  2.  
  3. public   class  TestA  extends  BaseModel { 
  4.  
  5.     @Override 
  6.      public   < X >  X get(String property) { 
  7.          return   super .get(property); 
  8.     } 

使用javac编译,就会出现

无法确定 <X>X 的类型参数;对于上限为 X,java.lang.Object 的类型变量 X,不存在唯一最大实例

然而在eclipse里面却可以编译通过,一开始以为是javac编译选项设置不对,后来发现怎么试也不行,后来在网上查了下,原来eclipse的编译器用的不是javac,而是自带的jdt,而jdt则存在于eclipse的一个plugin里面的org.eclipse.jdt.core_3.5.2.v_981_R35x.jar文件中,注意另外还要从改jar文件中将jdtCompilerAdapter.jar拉出来,然后把这两个jar文件都放到放到ant的lib目录下:

  1. <target name="compile" description="Compile Java classes required on serverside"> 
  2.         <mkdir dir="war/WEB-INF/classes"/> 
  3.         <javac srcdir="src" destdir="war/WEB-INF/classes" encoding="utf-8" compiler="org.eclipse.jdt.core.JDTCompilerAdapter" 
  4.                   source="1.6" target="1.6"> 
  5.             <classpath> 
  6.                 <path refid="gwt.classpath" /> 
  7.                 <path refid="compile.classpath"/> 
  8.             </classpath> 
  9.              <compilerarg value="-Xlint"/> 
  10.         </javac> 
  11.     </target> 

这里需要注意指定source和target的版本,否则可能会出现编译错误

通过这个配置,可以保证对所有java源码进行编译,另外在这一步编译完成后,还需要用gwt编译器将客户端代码编译为javascript,这个通过gwt提供的编译器来完成,其配置如下:

 

  1. <target name="gwtc" description="GWT compile to JavaScript" depends="compile"> 
  2.         <mkdir dir="war/WEB-INF/classes"/> 
  3.         <java fork="true" classname="com.google.gwt.dev.Compiler"> 
  4.             <classpath> 
  5.                 <pathelement location="${src.dir}" /> 
  6.                 <pathelement location="war/WEB-INF/classes" /> 
  7.                 <path refid="compile.classpath" /> 
  8.                 <fileset dir="${gwt.home}"> 
  9.                     <include name="*.jar"/> 
  10.                 </fileset> 
  11.             </classpath> 
  12.             <jvmarg value="-Xmx512M" /> 
  13.             <arg value="-logLevel"/> 
  14.             <arg value="INFO"/> 
  15.             <arg value="-style"/> 
  16.             <arg value="Obfuscated"/> 
  17.             <arg value="com.certus.isa.isa"/> 
  18.         </java> 
  19.     </target> 

上面的target,只需要提前定义好src.dir和gwt.home两个属性变量即可