在为与Java 6兼容而编译的项目中,我可以使用Java 7中编译的jar作为依赖项吗?我没有依赖项的源代码。我将编译的jar作为maven依赖项。
在为与Java 6兼容而编译的项目中,我可以使用Java 7中编译的jar作为依赖项吗?
让我们取消选择:
您有一个已编译的项目,因此可以在Java 6 JRE上运行。(假设您仅在该项目中使用Java 6 API。)此项目的.class文件必须具有classfile格式的主版本50,否则Java 6 JRE将无法加载它们。
然后,您具有一个“用Java 7编译”的依赖项。这可能意味着两件事之一:
可以使用Java 7工具链进行编译,但使用Java 6的目标版本。
可以使用Java 7的Java 7工具链来编译它。
在上述两个子情况下,如果在Java 7 JRE 1上运行项目,则应该能够在Java 6项目中使用依赖项。Java 7 JRE可以加载和运行针对Java 6编译的类文件。在其中一种情况下,您将加载具有两个(或更多)类版本号的类。但这没关系。
另一方面,如果尝试在Java 6 JRE上运行代码,则:
子情况1将工作提供了Java 7的依赖性不使用任何Java 7(或更高版本)的API; 即,它仅使用Java 6或更早版本中存在的Java标准类,方法等。
子情况2将不起作用。Java 6 JRE将无法加载依赖项。确实,如果依赖项是静态的(即项目源代码具有依赖项的API的编译时依赖项),则该项目代码将无法构建...因为Java 6编译器应拒绝读取依赖项的较新版本的类文件。
最可取的方法是将您的项目和执行平台迁移到Java7。或者最好将迁移到Java 9,因为Java 7已经过EOL。
如果您不能做到这一点,那么下一个最好的办法就是避免使用Java 7依赖项,直到可以升级为止。
如果您的客户坚持要求您继续支持Java 6,那么他们会阻碍您升级产品线的能力。他们应该为此付费。
如果您是出于内部原因而避免升级Java平台,则此决定正在积累技术部门...您的组织将被迫长期回报。
1-....或JDK。就运行代码而言,JDK等效于JRE。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句