提前抱歉,如果这是一个愚蠢的问题,但我澄清这一点的研究并没有我需要的那么成功。
我正在使用 jdk 11 开发一个项目,为了获得适当的测试覆盖率,我添加了一些东西来模拟外部服务的调用/应答。所以我包括了wiremock。 正如他们的设置入门部分所建议的,我包括了
testImplementation "com.github.tomakehurst:wiremock-jre8:2.34.0"
尽管我的机器上一切正常(并且测试在管道上运行良好),但我不知道这是否会在其他机器上引起问题。参与该项目的架构师也表达了他对我们只使用 jre 11 的担忧。
因此,我需要更多的见解来改变事情或争论为什么这不是问题。
我预计mavencentral上会有更高版本的wiremock,但只有两个项目:
令我惊讶的是,wiremock-jre8 是最新版本。我不知道旧版本是用什么编译的,但我使用的注释无论如何都不适用于 2020 版本。因此,最好不要将当前的实现降级为可读性较差的解决方案。
我要提一下,我只是从命名上猜测wiremock-jre8是用jdk8编译的。我没有找到任何关于编译器为这些依赖项生成字节码的证据,也没有找到关于如何解释它的线索。
当试图弄清楚前后可组合性如何与 java、编译器和生成的字节码一起工作时,我发现了这篇较早的帖子。简而言之,它指出:
从 javac 的角度来看兼容性(因为它是 JDK 特有的部分),这意味着生成的字节码可以在 jvm 的未来版本中运行(与 JRE 更相关,但也捆绑在 JDK 中) ).
- JDK(通常)是向前兼容的。
- JRE(通常)向后兼容。
我确实部分理解,但不完全理解我的问题。尤其是“通常”部分。 那么是否有人需要提供更多见解来启发我? :)
其文档的下载和安装部分包含这句话:
此外,这些 JAR 的版本针对 Java 7 和 Java 8+ 进行分发。
因此,如果您仍在运行 Java 1.7,则必须使用 Java 7 的版本。
对于 Java 的所有更高版本,都有适用于 Java 8+ 的版本(您使用的版本)。
由于这是一个积极支持的项目,与 Java 8 之后的 Java 版本相关的任何问题都将得到正确处理和解决(例如,请参阅构建并完全支持 JDK 17,该问题已在“com.github.tomakehurst:wiremock-”中解决) jre8:2.32.0").
实际上您可能会遇到一个问题。
wiremock-jre8-standalone
javax.annnotations 包中有一些类,与官方 javax.annotations 结合使用可能会导致拆分包错误。
我在使用
wiremock-spring-boot
时遇到了问题,并通过排除 wiremock-jre8-standalone
并添加较新的 wiremock-standalone
解决了该问题
<!-- https://mvnrepository.com/artifact/com.github.tomakehurst/wiremock -->
<dependency>
<groupId>com.maciejwalkowiak.spring</groupId>
<artifactId>wiremock-spring-boot</artifactId>
<version>1.0.1</version>
<exclusions>
<exclusion>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-jre8-standalone</artifactId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.tomakehurst/wiremock-standalone -->
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-standalone</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>