问题出现:JRE版本低于1.7不受支持。 这只是一个bug还是有意为之?我在Eclipse中找不到相应的错误报告。所以Eclipse放弃了对ANT的Java 6支持!
List<MyObject> list = new ArrayList<>();
try (InputStream stream = createInputStream()) { ...}
List<MyObject> list = new ArrayList<MyObject>();
并且对于try-with-resources:
InputStream stream;
try
{
...
}
finally
{
stream.close();
}
我们用自定义插件替换了捆绑插件后,就可以像往常一样使用自定义JRE启动ANT任务。
您可以使用Eclipse git存储库中的原始源代码创建自己的ANT插件:http://git.eclipse.org/c/platform/eclipse.platform.git/refs/tags(使用标签ID:I20150430-1445),或者使用我预编译的捆绑包:支持Java<7的Eclipse Mars ANT插件
安装非常简单:
有关此解决方案的更多详细信息,请参见此博客文章。
启动ant构建环境需要Java 1.7,但你可以使用任何JDK编译类文件。默认情况下,ant使用启动环境中的javac和javaw,但你可以在ant任务中覆盖它。
我在示例中使用了以下常量:
<property name="javac.location" value="c:/Program Files/Java/jdk1.6.0_45/bin/javac.exe" />
<property name="java.location" value="c:/Program Files/Java/jdk1.6.0_45/bin/javaw.exe" />
Java编译: 您可以定义名为“executable”的javac位置参数:
<javac srcdir="@{source.dir}" destdir="@{target.dir}" debug='@{debug}' encoding="UTF-8" fork="true" source="@{source}" target="@{target}" executable="${javac.location}">
<java classname="com.google.gwt.dev.Compiler" fork="yes" failonerror="true" maxmemory="${gwt.compile.maxmemory}" jvm="${java.location}">
一些ant任务默认使用默认编译器,例如wsimport-ant任务(它从wsdl生成源文件并使用默认的java进行编译)。为了防止这种情况发生,可以使用-Xnocompile参数运行wsimport,并使用javac编译生成的源文件(参见上文)。
<wsimport-ant xadditionalHeaders="true">
<xjcarg value="-XautoNameResolution" />
<arg value="-d" />
<arg value="${src-gen.dir}/wsdls" />
<arg value="-keep" />
<arg value="@{wsdlsource}" />
<arg value="-Xnocompile" />
</wsimport-ant>
Eclipse Mars不再支持Java 6 :(
因此,我们必须转向IntelliJ IDEA。
参见:
显然,@rjahn上面提到的默认ant插件的“JDK必须为>=1.7”检查并不总是被执行,但我还没有完全调试它以查看原因...
Java 6和7不再接收来自Oracle的公共更新。虽然您可以使用旧版本的运行时库进行编译以满足这些要求,但您应该使用更新的JRE来实际运行任何内容。
这只是纯粹的愚蠢。我们要么必须切换回旧版本的eclipse,要么切换到其他IDE。遗留系统仍在1.6中运行,当您可以使用1.6 jre在Mars中创建项目时,ant也应该能够本地编译它以针对1.6。
另一种解决方案是更新您在其中调用javac的build.xml。在企业构建中,可能会有数百个位置。
似乎每个eclipse版本都会搞砸一些基本事情。