Java项目迫使dependents采用Java版本?

时间:2014-09-24 23:54:56

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

这是一个问题。假设我有一个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,但那是另一个完全问题;问题是将生成的字节码与用于生成它的源版本分离开来)

2 个答案:

答案 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无关。