当我使用JDK6在Eclipse Mars中调用ANT脚本(运行为> Ant Build ...> JRE> Separate JRE)时,我收到以下错误消息:
出现问题:不支持小于1.7的JRE版本。
这只是一个错误还是故意的?我无法在Eclipse上找到相应的错误报告。所以Eclipse放弃了对ANT的Java 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
安装很简单:
有关该解决方案的更多详细信息,请参阅this blog post。
答案 1 :(得分:1)
Eclipse Mars不再支持Java 6 :(
所以我们必须改为IntelliJ IDEA。
请参阅:
答案 2 :(得分:1)
有一些相当混乱的事情!?我的(Windows 7)环境是这样的:
在此配置中,此问题的一个“解决方案”(!)是使用键盘快捷方式(或RMC-&gt; Run as-&gt; Ant Build)运行构建文件,而不进行任何自定义“外部工具配置”对话框!?
当我使用keyborard快捷方式(Alt-Shift-X,Q)时,构建文件正常工作(并且它确实从JDK 1.6开始javaw
和javac
,正如我从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)
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个地方。
似乎每个日食版都搞砸了一些基本的东西。