【问题标题】:Java projects forcing dependents to adopt Java versions?Java 项目强制家属采用 Java 版本?
【发布时间】:2014-11-19 14:58:00
【问题描述】:

这是一个问题。假设我有一个 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,但这完全是另一个问题;问题是解耦从用于生成它的源版本生成的字节码)

【问题讨论】:

  • 如果 B 使用的是 Java 8,您可能能够实现的最好的结果是使用 jdk8 编译 A,但 target = 1.7。不过,这可能毫无意义,因为 B 中的类不会在 JDK7 下运行。所以,简而言之,如果 B 切换,A 要么停留在旧版本,要么也必须切换。

标签: java maven compatibility javac maven-compiler-plugin


【解决方案1】:

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

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

与 Maven 无关。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-13
      • 2012-08-30
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2022-07-28
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      相关资源
      最近更新 更多