通常,我会使用这样的一行来编译:
javac -source=1.4 -target=1.4 MyClass.java
但是,MyClass.java实现了java.sql.ResultSet接口,它在Java 6中添加了几个新方法,因此我得到了如下编译错误:
MyClass is not abstract and does not override abstract method updateNClob(java.lang.String,java.io.Reader) in java.sql.ResultSet
我不能简单地实现缺少的方法,因为许多使用泛型,这在Java 1.4中是不可用的.
似乎解决方案是获取和编译Java 1.4 JAR.所以,我有几个问题:
>有更好的方法吗?
>如何指定我的Java 1.6 javac,我想使用1.4 JAR而不是Java 6 JAR?
>这是否会起作用,如果是这样,项目是否会在Java 1.4和Java 6上运行?
>我如何在Maven中执行此操作?
谢谢!
解决方法
所以我先说一些事实:
-source = 1.4表示:亲爱的编译器,请接受只有JDK 1.4的javac提供的语言结构—不是库功能.
-target = 1.4表示:亲爱的编译器,请以二进制文件格式编写类文件,该格式与JRE 1.4兼容.
我收集到您对JDK 1.4的加载时兼容性感兴趣,即您希望JDK 1.4可以加载您的设置中生成的类文件.是对的吗?
您是否也想支持源兼容性?即你想让其他人在JDK 1.4上编译你的代码吗?
如果上一个问题的答案是肯定的,我会尝试在OS X上安装JDK 1.4.它支持多个已安装的JDK.所以我很确定这是可能的.如果没有选择使用:
-source=1.4 -target=1.4 -bootclasspath=[path/to/1.4.jar]
注意,不要使用-Xbootclasspath.这会更改执行javac的jvm的引导类路径.
如果上述问题的答案是否定的.您可以处理-source = 1.4,从而允许您在代码中使用泛型和其他Java 5增强功能.但是您仍然必须使用以下方法提供二进制兼容性:
-target=1.4 -bootclasspath=[path/to/1.4.jar]
另一种选择是使用Retroweaver.
重新阅读你的问题之后,我想补充说你必须掌握jdbc类文件的JDK 1.4变体.否则,您将遇到您在问题中显示的编译器错误.