我可以在Ant build.xml中指定要编译的JDK路径吗?
我希望将JDK1.6用于项目的一个分支,而其他人则继续使用JDK1.5。开发人员希望偶尔在这两者之间切换 那么,判断使用哪个JDK的最佳方法是什么?我所说的“最佳”是指健壮、透明、低维护、与源代码一起进行版本控制(Ant本身和JDK当然不是,但它们生活在标准位置)我可以在Ant build.xml中指定要编译的JDK路径吗?,ant,build,java,javac,jdk1.6,Ant,Build,Java,Javac,Jdk1.6,我希望将JDK1.6用于项目的一个分支,而其他人则继续使用JDK1.5。开发人员希望偶尔在这两者之间切换 那么,判断使用哪个JDK的最佳方法是什么?我所说的“最佳”是指健壮、透明、低维护、与源代码一起进行版本控制(Ant本身和JDK当然不是,但它们生活在标准位置) 我想,在Ant之外有一个明显而不是最好的方法:不断更改JAVA_HOME env变量。然而,这需要开发人员手动切换(另一件要记住的事情:容易出错),一个改变所有多构建服务器(现在我需要做更多的工作) 寻找一些简单的javac属性,例
我想,在Ant之外有一个明显而不是最好的方法:不断更改JAVA_HOME env变量。然而,这需要开发人员手动切换(另一件要记住的事情:容易出错),一个改变所有多构建服务器(现在我需要做更多的工作) 寻找一些简单的javac属性,例如
jdkpath
,我注意到了几个属性(感谢在网上和SO中阅读):
——这很公平,但文档中说“现代:…javac1.5和javac1.6..作为别名”。。对我来说,这意味着它不会有任何区别,是吗编译器
-似乎只与JLS版本相关(尽管从上面链接的文档中没有%100清楚)source
-字节码版本目标
-一些SO答案提到了这一点,但非常不清楚,似乎有点骇人听闻bootclasspath
-指向javac的路径,但不是指向libs的路径--似乎是最接近的匹配,隐式指定JDK路径?更新:由JB Nizet确认可执行文件
-这里似乎需要true(否则它会忽略上面的内容而不会出错?)。更新:与默认值相比,有任何性能影响吗?(我想现在JVM的启动时间更好了,但仍然如此)fork
我想到了一些技巧(例如在每个平台上包装ant可执行文件只是为了设置env var-很遗憾),但我真的希望我错过了一些:)使用可执行文件属性需要将fork属性设置为true。这意味着javacant任务将启动一个外部进程来执行javac
手动启动javac时,不必指定任何特定的JDK lib目录:它知道在哪里可以找到它所属的JDK库。我想说,如果您通过ant的javac任务启动它,情况也会一样(除非您重写bootclasspath)。使用哪个版本的JDK编译类不一定重要。在特定JDK编译资源的方式上可能存在差异,但如果差异仅在v1.5和v1.6之间,则可以使用1.6 JDK编译与Java 1.5(甚至1.1)兼容的代码 您可以使用
target
属性控制要编译的JVM版本:
<javac srcdir="${src}"
destdir="${build}"
fork="true"
source="1.5"
target="1.6" />
谢谢,说得好。。虽然我知道JDK路径是在独立运行javac时推断出来的,但Ant文档在这方面还很不清楚。。您能否确认executable+fork组合“相当于在运行Ant之前设置JAVA_HOME?”(请更新答案)+1is fork=true在Java6中非常昂贵?但这并不能防止开发人员无意中使用1.6 JDK类(例如NavigableMap)。这个错误只有在JDK1.5下运行时才会被捕获…哎哟!解决这个问题的一种方法是使用bootclasspath。或者只使用JDK1.5进行编译。