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

p8ekf7hl  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(405)

我有和这里类似的问题。然而,这个问题并没有提到他正在使用什么构建工具,我假设他正在使用maven,因为我以前在使用Java9模块时,maven没有问题。
我正在使用hibernate验证器,我想使用Java9模块,所以我添加了一个 module-info 文件到模块的包中,我依赖于验证器api(我使用的类是 Validator , ValidatiorFactory , ... 从像 javax.validation )
我搜索了这些类,发现它们位于我的项目依赖项中的这个jar中: validation-api-2.0.1.Final.jar ,我使用的类在包中 validation .
我使用了命令 jar --file=/path-to-the-jar-on-my-pc/validation-api-2.0.1.Final.jar --describe-module 在终端中,获取从该jar导出的模块的名称:

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 例如,文件 requires javax.validation ide抱怨找不到模块。我甚至在项目结构中手动添加了依赖项(按 ctrl+shift+alt+s 要在intellij中访问它,我从存储在机器中的路径添加了它,但结果仍然相同。
我还尝试了intellij的帮助工具,发现它增加了 requires java.validation; 我的模块信息,而不是 requires javax.validation; ,但无论如何,它们都不起作用。
我搜索了一下 pom.xml 并找到了这个元素 <Automatic-Module-Name>java.validation</Automatic-Module-Name> ,所以现在我几乎可以肯定是gradle造成了这个问题,但我不是gradle和构建工具工作原理方面的Maven,所以我如何继续使用gradle作为构建工具来解决这个问题呢?

gijlo24d

gijlo24d1#

直到版本6.4,gradle才为java平台模块系统添加适当的支持。但是,您必须显式配置gradle以使用模块。

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

如果我没弄错的话, inferModulePathtrue 默认情况下,从gradle 7.0开始。
有关java模块和gradle的更多信息,请参阅https://docs.gradle.org/current/samples/sample_java_modules_multi_project.html

相关问题