我使用mac(因此是java 1.6)来开发在Java 1.5中发布的跨平台应用程序。我发现Eclipse可以强制执行1.5合规性,这使我无法使用1.6样式的@Override语法发布一些代码。但是,eclipse的合规性检测仅限于语法。它不会捕捉功能。我使用了1.6 String.isEmpty()方法,例如,它在Eclipse和我的mac命令行中没有警告地构建和运行,但是当转移到我们的1.5 linux机器时就崩溃了。
有没有办法,也许我可以在构建之后运行jar文件,或者以任何其他方式运行jar文件,以便在不离开我的mac的情况下捕获1.6-isms?
答案 0 :(得分:3)
好问题。我的建议是在Eclipse中正确配置项目的构建路径以指向1.5库。
首先,安装1.5 JDK或JRE。然后,转到Eclipse项目的Properties。在Java Build Path下,单击Libraries选项卡,找到标有“JRE System Library”的条目。编辑该条目以指向“备用JRE”(您可能必须单击“已安装的JRE”以告知Eclipse JRE在哪里)。选择你的1.5 JRE。
这应该使用只有1.5 API的Java 5 rt.jar。
答案 1 :(得分:2)
如果您正在使用Maven,那么这正是animal sniffer的用途。
如果您正在开发一个必须支持在JDK 1.4版上运行的项目,但您的开发系统没有可用的JDK 1.4版,那么很容易意外地使用仅在较新版本中可用的方法或类JDK。例如,如果您在较新的 Macintosh 上为Maven 2.0.x开发插件。
动物嗅探器可以检查编译代码使用的类和方法签名,并验证您是否仅使用了目标API中可用的类和签名。
答案 2 :(得分:1)
什么阻止你在Mac Box上使用1.5 java版本。我有mac机器,它有java 1.5和1.6版本。如果您无法找到其位置,请在以下位置: /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home
答案 3 :(得分:0)
这个答案是一个黑客,并且完全没有经过测试,但它应该有用。
当Eclipse编译代码时,它使用属于当前和/或指定JRE的rt.jar
和tools.jar
。您可以将“普通”JDK复制到新目录中,并从Linux / Windows 1.5发行版中替换JAR文件。将该JRE作为备用添加到Eclipse(在“首选项”中),并在要验证代码时切换到它。
答案 4 :(得分:0)
唯一真正彻底的事情是安装1.5 JDK并使用它进行编译。如果你不能在OS X上安装旧版本的java,那么安装VirtualBox,在其中安装Linux,并在其上安装java。这听起来像是一个精神上的事情 - 它可能 是一个精神上的事情 - 但它实际上非常简单,并且它给你一个绝对无懈可击的构建。
答案 5 :(得分:0)
如果您通过javac正常编译,则有一个命令行选项-source release Java Oracle doc,指定接受的源代码版本。
因此,仅使用1.5使用-source 5或-source 1.5
进行构建答案 6 :(得分:0)
假设您从10.5升级到OSX 10.6,您应该将JDK v1.5与JDK 1.6一起安装,否则您可以从Apple下载它。
然后,您可以使用 ant 和JDK 1.5构建应用。 请注意, ant 依赖于您为JAVA_HOME环境变量设置的值。
您可以编辑 /Users/name/.bash_profile ,根据JDK安装位置的实际路径包含这些值:
JAVA_HOME_14=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home
JAVA_HOME_15=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home
JAVA_HOME_16=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
export JAVA_HOME=$JAVA_HOME_15
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
因此,当您需要切换到JDK 1.6时,只需交换
即可export JAVA_HOME=$JAVA_HOME_15
使用:
export JAVA_HOME=$JAVA_HOME_16
答案 7 :(得分:0)
我为此目的使用DependencyFinder。这首先分析我的jar文件中所有类的字节码,并提取所有依赖项。因此,将生成一个XML报告,其中包含我的应用程序引用的所有类,构造函数,方法和成员属性。
然后分两步过滤此XML报告:
java.*
和javax.*
。如果生成的报告在过滤后包含任何类,构造函数,方法或成员属性(即,如果这不是空的),则构建将中止 - 这意味着您正在使用目标不支持的API JDK发布。
听起来有点冗长,但在实践中效果很好,并且不依赖于您的IDE设置(当多个开发人员在同一个项目上工作时这是不切实际的)。我有一个自动执行此任务的ant宏,虽然这个解决方案当然不需要ant。