Eclipse Mars:ANT不再支持JDK 1.6了吗?

时间:2015-08-04 11:29:06

标签: java eclipse ant

当我使用JDK6在Eclipse Mars中调用ANT脚本(运行为> Ant Build ...> JRE> Separate JRE)时,我收到以下错误消息:

出现问题:不支持小于1.7的JRE版本。

这只是一个错误还是故意的?我无法在Eclipse上找到相应的错误报告。所以Eclipse放弃了对ANT的Java 6支持?!

6 个答案:

答案 0 :(得分:5)

我们使用自定义ANT插件修复了问题。它取代了Mars捆绑的ANT插件。原始插件不支持Java< 7因为它是用Java 7语法编写的,所以它检查了Java版本。很容易替换Java7语法以与> = 5兼容并删除Java 7检查。

两个语法“问题”是:

  • 钻石操作员,例如List<MyObject> list = new ArrayList<>();
  • 尝试使用资源,例如try (InputStream stream = createInputStream()) { ...}

Diamond运营商的向后兼容性:

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)或使用我预编译的包:Eclipse Mars ANT plugin with support for Java < 7

安装很简单:

  • 下载zip存档*,将内容解压缩到&lt; eclipse_dir&gt; / plugins。
  • 使用参数-clean(仅一次)
  • 启动eclipse
  • 通过外部工具配置...
  • 为您的ANT任务配置JRE6

有关该解决方案的更多详细信息,请参阅this blog post

答案 1 :(得分:1)

Eclipse Mars不再支持Java 6 :(

所以我们必须改为IntelliJ IDEA。

请参阅:

答案 2 :(得分:1)

有一些相当混乱的事情!?我的(Windows 7)环境是这样的:

  • Eclipse Neon R2(4.6.2)
  • JDK 1.8启动Eclipse
  • JDK 1.6作为Eclipse中的默认JRE

在此配置中,此问题的一个“解决方案”(!)是使用键盘快捷方式(或RMC-&gt; Run as-&gt; Ant Build)运行构建文件,而不进行任何自定义“外部工具配置”对话框!?

当我使用keyborard快捷方式(Alt-Shift-X,Q)时,构建文件正常工作(并且它确实从JDK 1.6开始javawjavac,正如我从Process Explorer),但是一旦我对“启动配置”进行了修改(例如选择新目标),那么我也开始得到“不支持小于1.7的JRE版本”错误!?

如果在收到错误后,我转到“外部工具配置...” - &gt; “删除所选的启动配置”,然后使用键盘快捷键启动构建,它再次有效!?

显然,@ rjahn上面提到的“JDK必须是&gt; = 1.7”检查(默认的ant插件)并不总是被执行,但是我没有一直调试它以查看原因。 ..

答案 3 :(得分:1)

Java 1.7需要启动ant构建环境,但您可以使用任何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}">

在此之后,ant使用javac从JDK 1.6编译类文件。

要使用java 1.6运行ant的应用程序,请使用java任务的jvm参数:

<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(Neon .3)和Oracle JDK 1.6(或任何其他JDK)中完美运行。

答案 4 :(得分:0)

来自Oracle的

Java 6 and 7 no longer receive public updates。虽然您可以很好地针对旧版本的运行时库进行编译以满足这些要求,但您应该使用较新的JRE来实际运行任何内容。

答案 5 :(得分:0)

这只是简单的愚蠢。我们还必须切换回旧版eclipse或切换到其他IDE。遗留系统仍然在1.6中运行,当你可以在火星上创建1.6 jre的项目时,ant也应该能够在1.6中本地编译它。

另一个解决方案是在你调用javac的地方更新你的build.xml。在公司建设中,它将是100个地方。

似乎每个日食版都搞砸了一些基本的东西。