Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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 8库编写应用程序代码,并尝试使用Java 6编译器编译它,构建是否会失败?_Java_Eclipse_Tomcat - Fatal编程技术网

如果我使用Java 8库编写应用程序代码,并尝试使用Java 6编译器编译它,构建是否会失败?

如果我使用Java 8库编写应用程序代码,并尝试使用Java 6编译器编译它,构建是否会失败?,java,eclipse,tomcat,Java,Eclipse,Tomcat,我的笔记本电脑上有Java8。我使用java.time库编写了一个小代码段,以使用EclipseIDEV4.9(2018-09版)计算应用程序处理时间。该项目使用Java1.6编译器版本。然后我在我的笔记本电脑上运行了这个应用程序,它运行时没有任何错误,并且产生了预期的输出。然后,我使用Java1.6编译器将应用程序导出到war文件中,在运行Java1.7VM的Tomcat6服务器上运行它。我面临以下情况: 日志文件中没有错误。日志级别设置为调试 应用程序处理数据库行,并根据某些逻辑,在4个不同

我的笔记本电脑上有Java8。我使用java.time库编写了一个小代码段,以使用EclipseIDEV4.9(2018-09版)计算应用程序处理时间。该项目使用Java1.6编译器版本。然后我在我的笔记本电脑上运行了这个应用程序,它运行时没有任何错误,并且产生了预期的输出。然后,我使用Java1.6编译器将应用程序导出到war文件中,在运行Java1.7VM的Tomcat6服务器上运行它。我面临以下情况:

  • 日志文件中没有错误。日志级别设置为调试
  • 应用程序处理数据库行,并根据某些逻辑,在4个不同的数据库表中插入数据。在轮询输入数据库表时,应用程序未拾取有效的输入行
  • 我在笔记本电脑上安装了Java7,使Java7成为工作区JRE,代码段抛出了一个编译错误 我的问题是,当我使用Java6编译器编译基于Java8库的代码时,构建不应该失败吗?在整个练习过程中,应用程序没有抛出任何错误,它在我的笔记本电脑上成功运行并产生了预期的输出(显然是因为我的笔记本电脑有Java8VM)。我发现问题的根本原因纯属偶然。这是Java错误还是已知问题


    更新:我不是在寻找问题的解决方案。我正在寻找Java编译器行为的解释。

    Java.time
    仅在Java8中引入。因此,如果您使用它,您的代码将无法在以前的JVM版本上工作


    您应该更改Tomcat的JVM版本,或者从项目中删除依赖于
    java.time的代码。

    如果您使用maven,您的代码将要运行。但您必须确保只使用所选Java版本中的功能。

    是的,如果使用Java 7+版本中引入的功能,可能会失败。引用几句话:

  • java.time库
  • 菱形语法: 列表=新的ArrayList()
  • Lambda或流函数
  • switch语句中的字符串
  • Iterable接口中的forEach()方法
  • 接口中的默认和静态方法

  • 这不是一个完整的列表,只是几个示例。

    您使用过lambda's或streams吗?您使用了Java 6中没有的东西吗?只使用了Java.time库。没有lambda或streams,所以它不会工作。Java8编译器确切地知道如何处理与Java6兼容的代码,因为它在某种程度上是嵌入了“过去的知识”。你要做的是,有一个编译器编译代码,它在创建时不可能存在(编译器也不知道该怎么做),但它确实有效。Java1.6编译器设法编译代码并生成WAR文件。当我在Tomcat1.6服务器中部署WAR文件时,应用程序运行时没有任何错误。问题是,它没有执行它应该执行的操作,即从数据库表中读取条目。但在运行时并没有应用程序错误,在编译期间也并没有任何构建错误。所以。。。您使用Java 6编译器编译了Java 6中不存在的代码?叫我怀疑,我不相信。如果问题是“它没有做它应该做的事情”,那么你在代码中犯了逻辑错误。这不是我的问题。我已经通过删除java.time相关代码解决了这个问题。我的问题是,由于我使用的是旧的编译器版本,所以构建不应该失败吗?我完全依赖于您的代码。如果您在代码中使用旧编译器不支持的新功能,它将失败。这就是我被难倒的地方,因为编译没有失败。在Tomcat 1.6服务器中部署使用Java 1.6编译器构建的WAR文件时,也没有出现任何运行时错误。JVM具有向后兼容性。如果您使用1.6编译器编译代码,并在JVM1.7(例如)或更高版本上运行,它将正常工作。但是,如果您使用1.7编译器编译代码并在JVM 1.6上运行,那么如果您使用的是旧版JVM中未引入的新功能,则可能会失败。这里的问题不是JVM兼容性。问题是,使用1.8库编写的代码使用1.6编译器编译并导出到WAR,并在1.7 JVM中无误运行,但未能实现其逻辑目标。通过删除1.8代码段,它得到了修复。在某个时刻,应该有一个错误,但事实并非如此。编译器不应该编译代码,也不应该导出WAR,或者日志记录器应该产生适当的错误。我甚至不知道在这种情况下会出现什么错误,因为我以前从未遇到过这种情况,也没有在网上找到类似的东西。这就是我的问题,因为它没有失败。这是一个已知的问题还是一个新的Java错误?Maven没有使用。SimpleEclipseTomcat集成用于在本地运行,并导出war文件以在RHELTomcat服务器上运行。