ant使用javac构建GXT项目

为方便构建、打包项目,项目准备采用ant来构建,但在执行compile的target时,发现javac无法编译GXT的部分代码,例如:
  
  1. importcom.extjs.gxt.ui.client.data.BaseModel;
  2. publicclassTestAextendsBaseModel{
  3. @Override
  4. public<X>Xget(Stringproperty){
  5. returnsuper.get(property);
  6. }
  7. }

使用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. <targetname="compile"description="CompileJavaclassesrequiredonserverside">
  2. <mkdirdir="war/WEB-INF/classes"/>
  3. <javacsrcdir="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. <pathrefid="gwt.classpath"/>
  7. <pathrefid="compile.classpath"/>
  8. </classpath>
  9. <compilerargvalue="-Xlint"/>
  10. </javac>
  11. </target>

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

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

  
  1. <targetname="gwtc"description="GWTcompiletoJavaScript"depends="compile">
  2. <mkdirdir="war/WEB-INF/classes"/>
  3. <javafork="true"classname="com.google.gwt.dev.Compiler">
  4. <classpath>
  5. <pathelementlocation="${src.dir}"/>
  6. <pathelementlocation="war/WEB-INF/classes"/>
  7. <pathrefid="compile.classpath"/>
  8. <filesetdir="${gwt.home}">
  9. <includename="*.jar"/>
  10. </fileset>
  11. </classpath>
  12. <jvmargvalue="-Xmx512M"/>
  13. <argvalue="-logLevel"/>
  14. <argvalue="INFO"/>
  15. <argvalue="-style"/>
  16. <argvalue="Obfuscated"/>
  17. <argvalue="com.certus.isa.isa"/>
  18. </java>
  19. </target>

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

本文出自 “智慧网管” 博客,请务必保留此出处http://wisenms.blog.51cto.com/813376/436134

你可能感兴趣的:(javac)