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

当我使用JDK6在Eclipse Mars中调用ANT脚本(运行方式> Ant Build …> JRE> Separate JRE)时,出现以下错误消息:

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

这只是一个bug还是故意的? 我在Eclipse上找不到相应的错误报告。 那么Eclipse为ANT放弃了Java 6支持?!

  • 屏幕截图: 为ANT选择JDK 1.6作为运行时JRE
  • 屏幕截图: 执行ANT脚本时出错

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

两个语法“问题”是:

  • 菱形运算符,例如List list = new ArrayList<>();
  • try-with-resources,例如try (InputStream stream = createInputStream()) { ...}

Diamond运营商的向后兼容性:

 List list = new ArrayList(); 

并尝试资源:

 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插件,支持Java <7

安装很简单:

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

有关该解决方案的更多详细信息,请参阅此博客文章 。

Eclipse Mars放弃了对Java 6的支持:(

所以我们必须改为IntelliJ IDEA。

看到:

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

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

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

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

如果在收到错误后,我进入“外部工具配置…” – >“删除所选的启动配置”,然后使用键盘快捷键启动构建,它再次起作用!?

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

启动ant构建环境需要Java 1.7,但您可以使用任何JDK编译类文件。 默认情况下,ant使用来自启动环境的javac和javaw,但您可以在ant任务中覆盖它。

我在示例中使用了以下常量:

   

Java编译:您可以定义名为“executable”的javac位置参数:

  

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

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

  

某些ant任务默认使用默认编译器,例如wsimport-ant任务(它从wsdl生成源文件并使用默认java编译它)。 要防止这种情况,请使用-Xnocompile参数运行wsimport,并使用javac编译生成的源文件(参见上文)。

         

这种方法在最新的Eclipse(Neon .3)和Oracle JDK 1.6(或任何其他JDK)中完美运行。

Java 6和7不再从Oracle 接收公共更新 。 虽然您可以很好地针对旧版本的运行时库进行编译以满足这些要求,但您应该使用较新的JRE来实际运行任何内容。

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

另一个解决方案是更新您的build.xml,无论您何时调用javac。 在企业建设中,它将是100个地方。

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