这是一个问题。假设我有一个Maven项目(" A"),它将一个不同的Maven项目(" B")作为依赖项。两者目前都使用Java 7进行编译。如果Project B切换到Java 8,它是否会强制项目A也使用Java 8?
如果是这样,有没有解决方法 - 也就是说,让Project B生成项目A可以使用的代码,而不将Project B降级为Java 7或将Project A升级到Java 8?例如,让项目B执行某种形式的"源1.8目标1.7",例如。 (javac似乎并不喜欢这样,我无法找到一个替代的编译器 - 例如,plexus-compiler-eclipse不支持Java 8,但那是另一个完全问题;问题是将生成的字节码与用于生成它的源版本分离开来)
答案 0 :(得分:2)
Java向后兼容但不向前兼容。当运行程序的JVM(JRE)版本早于程序编译时,会出现错误(通常不支持的major.minor版本错误)。它很合乎逻辑。新JRE版本中可能引入了一些新的字节代码指令,旧JRE不知道(特别是对于所有新的Java 8花哨的东西)。
如果您有一个使用Java 8编译的依赖项(尽管我怀疑任何流行的依赖项已经被迁移到专门使用Java 8!),那么您必须升级您的项目以使用Java 8.
另一方面,如果您的项目升级到Java 8,那么由于向后兼容性保证,任何依赖项(无论是否使用Java 8,7或6编译)都可以使用。
答案 1 :(得分:0)
如果Project B切换到Java 8,它是否会强制项目A也使用Java 8?
是的,除非您可以使用-source 1.7 -target 1.7,
编译项目B,这意味着您无法在B中使用Java 8功能。
它与Maven无关。