Java 有没有办法在依赖项中强制执行编译器目标版本?
在Maven中配置target可确保库代码将在以前的编译器版本中运行,但如果库的依赖项是未来版本,则不能防止在使用它运行库时失败 例如,假设我的JDK是Java8 For compiler,如果我的代码使用Optionals,它将通过目标1.7,但在运行时将失败,因为它是1.8中引入的类,作为java内部依赖项提供Java 有没有办法在依赖项中强制执行编译器目标版本?,java,maven,java-8,Java,Maven,Java 8,在Maven中配置target可确保库代码将在以前的编译器版本中运行,但如果库的依赖项是未来版本,则不能防止在使用它运行库时失败 例如,假设我的JDK是Java8 For compiler,如果我的代码使用Optionals,它将通过目标1.7,但在运行时将失败,因为它是1.8中引入的类,作为java内部依赖项提供 是否有任何机制可以确保整个库符合1.7标准,从而在编译时启动选项?首先定义目标/源代码并不保证您的代码将使用其他JVM版本,而不是您用来编译的版本(这不太可能,但会发生)。唯一的解决
是否有任何机制可以确保整个库符合1.7标准,从而在编译时启动选项?首先定义
目标/源代码
并不保证您的代码将使用其他JVM版本,而不是您用来编译的版本(这不太可能,但会发生)。唯一的解决方案是使用假设您安装了适当的JDK并使用正确的JDK进行编译的方法
此外,对于库的问题,您可以使用,它还将根据JDK签名文件检查库
...
...
...
org.codehaus.mojo
结合如下所示:
[...]
org.apache.maven.plugins
maven enforcer插件
1.4.1
强制执行字节码版本
执行
1.7
org.mindrot:jbcrypt
真的
org.codehaus.mojo
额外执行者规则
1.0-beta-4
[...]
不,没有。因为库是编译文件。理论上,如果可以检查字节码签名或其他东西,那么应该有一种可能性。不幸的是,依赖项没有java版本属性,请参阅。你也可以创建一个maven插件来进行类扫描(简单)。