Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 月食火星:蚂蚁不';你不再支持JDK1.6了吗?_Java_Eclipse_Ant - Fatal编程技术网

Java 月食火星:蚂蚁不';你不再支持JDK1.6了吗?

Java 月食火星:蚂蚁不';你不再支持JDK1.6了吗?,java,eclipse,ant,Java,Eclipse,Ant,当我在Eclipse Mars中使用JDK6调用ANT脚本时(以>ANT Build…>JRE>Separate JRE的方式运行),我会收到以下错误消息: 出现问题:不支持低于1.7的JRE版本。 这只是一个bug还是故意的?我在Eclipse上找不到相应的错误报告。所以Eclipse放弃了对ANT的Java6支持 截图: 截图: 来自Oracle。虽然您可以根据较旧版本的运行库进行编译以满足这些要求,但您应该使用较新的JRE来实际运行任何东西。Eclipse Mars放弃了对Java 6的

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

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

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

  • 截图:
  • 截图:

来自Oracle。虽然您可以根据较旧版本的运行库进行编译以满足这些要求,但您应该使用较新的JRE来实际运行任何东西。

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

因此,我们必须转变为IntelliJ理念

见:


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

这两个语法“问题”是:

  • 菱形运算符,例如
    List List=new ArrayList();
  • 尝试使用资源,例如
    try(InputStream=createInputStream()){…}
菱形运算符的向后兼容性:

List<MyObject> list = new ArrayList<MyObject>();
在我们用自定义插件替换捆绑的插件之后,可以像往常一样使用自定义JRE启动ANT任务


可以使用EclipseGit存储库中的原始源代码创建自己的ANT插件:(使用标记ID:I20150430-1445)或者使用我的预编译包:。

这简直是愚蠢。我们还必须切换回旧版本的eclipse或切换到其他IDE。遗留系统仍在1.6中运行,当您可以在Mars中使用1.6 jre创建项目时,ant也应该能够根据1.6本机编译它

另一个解决方案是在调用javac的地方更新build.xml,在企业构建中,它将有100多个位置


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

这有点乱七八糟!?我的(Windows 7)环境是这样的:

  • Eclipse Neon R2(4.6.2)
  • JDK1.8将启动Eclipse
  • JDK1.6作为Eclipse中的默认JRE
在此配置中,解决此问题的一个“解决方案”(!)是使用键盘快捷键(或RMC->run as->Ant build)运行生成文件,而无需在“外部工具配置”对话框中进行任何自定义

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

如果在收到错误后,我转到“外部工具配置…”->“删除选定的启动配置”,并使用键盘快捷键启动生成,它会再次工作


显然,(默认ant插件的)“JDK必须>=1.7”检查上面提到的@rjahn并不总是被执行,但我还没有调试它,以了解为什么启动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位置参数:


在此之后,ant使用javac从JDK1.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编译生成的源文件(参见上文)



这种方法在最新的eclipse(Neon.3)和OracleJDK1.6(或任何其他JDK)中完美地工作.

您从何处获得此消息的可能重复?在UI中,您从何处获得此消息?这不是重复。这与Mars运行的JVM版本无关。在我的设置中,Mars运行的是Java 1.8。请看,有大量业务项目绑定到特定的Java版本。使用Eclipse Kepler,我们可以使用它进行编译Java 1.4。Eclipse放弃对Java 1.6项目的支持没有任何技术原因。除了oracle之外,还有其他jvm实现,它们可能会得到更新/一开始就没有相同的问题(大多数安全修复都是针对浏览器插件的)或者其中一些仅仅支持Java6级API。另外,如果JMV用于某些工厂机器(不是普通计算机,更像制造机器),如果它们没有连接/访问到internet,它们可能根本不会更新。在这种情况下,最好在java 6中运行dev中的所有内容,以确保不可能意外地使用任何java 7内容。必须使用IDEA并不是缺点,但关于您的问题:为什么不使用java 8并使用目标和源代码1.6进行编译(见)?
<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}">
<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>