Ant调用Eclipse编译器编译报错,Eclipse内编译正常(JDK1.6)
问题分析与解决方案
这种情况我之前也碰到过,核心原因大概率是你用的JDT 3.13.x版本和JDK 1.6的兼容性不匹配,具体拆解下:
为什么Eclipse内正常但Ant调用报错?
Eclipse Oxygen(对应你用的JDT 3.13.x版本)的官方运行要求是Java 8及以上,也就是说Eclipse本身是用JDK 8启动的——哪怕你的项目编译级别设为1.6,JDT编译器是在JDK 8环境下运行的,自然能正常工作。
但你用Ant调用JDT时,是基于JDK 1.6运行的,而JDT 3.13.x的jar包本身可能包含了Java 8的语法特性或依赖类,在JDK 1.6环境下加载这些jar包时就会出现错误,比如找不到类、方法不存在等问题。
解决办法
1. 更换匹配JDK 1.6的JDT版本
找对JDK 1.6友好的JDT版本,比如Eclipse Mars(4.5)对应的JDT核心包版本是org.eclipse.jdt.core_3.11.x系列,这个版本的JDT可以在JDK 1.6环境下正常运行,同时支持编译1.6级别代码。
2. 调整Ant编译的JDK运行环境(如果不想换JDT)
如果要继续用JDT 3.13.x,那你需要让Ant用JDK 8运行,同时在编译配置里明确指定编译级别为1.6,并设置bootclasspath指向JDK 1.6的rt.jar,确保编译出来的代码兼容JDK 1.6。示例Ant配置片段:
<javac srcdir="src" destdir="bin" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"> <classpath refid="project.classpath"/> <compilerarg value="-source"/> <compilerarg value="1.6"/> <compilerarg value="-target"/> <compilerarg value="1.6"/> <compilerarg value="-bootclasspath"/> <compilerarg value="path/to/jdk1.6/jre/lib/rt.jar"/> </javac>
3. 检查Eclipse项目的编译配置对齐
确认Eclipse里项目的Java Build Path和Compiler Compliance Level设置,和Ant里的配置完全一致——比如是否有额外的注解处理器、编译参数,这些在Ant调用时可能遗漏了,导致编译行为差异。
内容的提问来源于stack exchange,提问作者jennychy
相关产品推荐
相关产品推荐

