java - 如何使用gradle作为构建工具依赖java中的java验证api/hibernate模块?

问题描述

我和here有类似的问题。然而,这个问题没有提到他使用的是什么构建工具,我假设他使用的是 maven,因为我之前在使用 java 9 模块时没有遇到 maven 问题。

我正在使用 hibernate 验证器并且我想使用 java 9 模块,所以我将一个 module-info 文件添加到我依赖验证器 api 的模块的包中(我使用的类是 { {1}},Validator,... 来自 ValidatiorFactory) 之类的包

搜索了这些类,发现它们位于我的项目依赖项中的这个 jar 中:javax.validation,我使用的类位于包 validation-api-2.0.1.Final.jar 内。

我在终端中使用了命令 validation 并获得了从该 jar 导出的模块的名称

jar --file=/path-to-the-jar-on-my-pc/validation-api-2.0.1.Final.jar --describe-module

所以现在当我放入我的 No module descriptor found. Derived automatic module. java.validation@2.0.1.Final automatic requires java.base mandated contains javax.validation contains javax.validation.bootstrap contains javax.validation.constraints contains javax.validation.constraintvalidation contains javax.validation.executable contains javax.validation.groups contains javax.validation.Metadata contains javax.validation.spi contains javax.validation.valueextraction 文件例如 module-info 时,IDE 抱怨没有找到模块。我什至在项目结构中手动添加了依赖项(按 requires javax.validation 以在 intellij 中访问它),我从它存储在我的机器中的路径添加它,但结果仍然相同。

我还尝试了 intellij 的帮助工具,我发现它在我的模块信息中添加ctrl+shift+alt+s 而不是 requires java.validation;,但无论如何它们都不起作用。

我在该模块的 requires javax.validation;搜索并找到了这个元素 pom.xml,所以现在我几乎可以肯定是 gradle 导致了问题,但我不是 gradle 和构建工具如何工作的专家,所以我如何继续使用 gradle 作为构建工具来解决这个问题

解决方法

Gradle 直到 6.4 版才添加对 Java 平台模块系统的适当支持。但是,您必须明确配置 Gradle 才能使用模块。

// build.gradle
java {
    modularity.inferModulePath = true
}

不过,如果我没记错的话,从 Gradle 7.0 开始,inferModulePath 默认是 true

有关 Java 模块和 Gradle 的更多信息,请参阅 https://docs.gradle.org/current/samples/sample_java_modules_multi_project.html