繁体   English   中英

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

[英]Eclipse Mars: ANT doesn't support JDK 1.6 anymore?

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

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

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

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

两个语法“问题”是:

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

Diamond运营商的向后兼容性:

List<MyObject> list = new ArrayList<MyObject>();

并尝试资源:

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存档*,将内容解压缩到<eclipse_dir> / 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)时,构建文件工作正常(并且它确实从JDK 1.6启动javawjavac ,就像我在Process Explorer中观察到的那样),但是一旦我修改了“启动配置”(例如选择一个新目标),然后我也开始得到“不支持小于1.7的JRE版本”错误!?

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

显然,@ rjahn上面提到的“JDK必须> = 1.7”检查(默认的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}">

在此之后,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)中完美运行。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM