2

这是一个问题。假设我有一个 Maven 项目(“A”),它引入了一个不同的 Maven 项目(“B”)作为依赖项。目前两者都使用 Java 7 进行编译。如果项目 B 切换到 Java 8,是否会强制项目 A 也使用 Java 8?

如果是这样,有没有办法解决它 - 也就是说,让项目 B 生成项目 A 可以使用的代码,而无需将项目 B 降级到 Java 7 或将项目 A 升级到 Java 8?例如,让项目 B 执行某种形式的“源 1.8 目标 1.7”,例如。(javac 似乎不喜欢这样,而且我找不到替代编译器——例如,plexus-compiler-eclipse 不支持 Java 8,但这完全是另一个问题;问题是解耦从用于生成它的源版本生成的字节码)

4

2 回答 2

3

Java 向后兼容,但不向前兼容。当运行一个 JVM (JRE) 版本比程序编译时更旧的程序时,您会收到一个错误,(通常的 Unsupported major.minor version 错误)。它很合乎逻辑。在较新的 JRE 版本中可能引入了一些新的字节码指令,而旧 JRE 不知道(尤其是对于所有新的 Java 8 奇特的东西)。

如果您有一个使用 Java 8 编译的依赖项(尽管我怀疑任何流行的依赖项已经迁移到专门使用 Java 8!),那么您必须升级您的项目以使用 Java 8。

另一方面,如果您的项目升级到 Java 8,那么任何依赖项,无论它们是使用 Java 8、7 还是 6 编译的,都将起作用,因为有向后兼容性保证。

于 2014-09-25T00:00:08.713 回答
1

如果项目 B 切换到 Java 8,是否会强制项目 A 也使用 Java 8?

是的,除非您可以编译项目 B,-source 1.7 -target 1.7,这意味着您不能在 B 中使用 Java 8 功能。

它与 Maven 无关。

于 2014-09-25T00:35:21.580 回答