我有一个最初是为Java 1.4编写的项目,但我的Mac上只有Java 6,我无法安装Java 1.4.
通常,我会使用这样的一行来编译:
javac -source=1.4 -target=1.4 MyClass.java
Run Code Online (Sandbox Code Playgroud)
但是,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
Run Code Online (Sandbox Code Playgroud)
我不能简单地实现缺少的方法,因为许多使用泛型,这在Java 1.4中是不可用的.
似乎解决方案是获取和编译Java 1.4 JAR.所以,我有几个问题:
javac我想使用1.4 JAR而不是Java 6 JAR?谢谢!
你的情况看起来很做作。我会尽力简化问题。首先,我将忽略你关于 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]
Run Code Online (Sandbox Code Playgroud)
注意,不要使用-Xbootclasspath。这会更改执行 javac 的 jvm 的引导类路径。
如果上述问题的答案是否定的。您可以禁止-source=1.4在代码中使用泛型和其他 Java 5 增强功能。但您仍然必须使用以下方式提供二进制兼容性:
-target=1.4 -bootclasspath=[path/to/1.4.jar]
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用Retroweaver。
重新阅读您的问题后,我想补充一点,您必须获取 jdbc 类文件的 JDK 1.4 变体。否则,您将遇到问题中显示的编译器错误。
| 归档时间: |
|
| 查看次数: |
1012 次 |
| 最近记录: |