在使用一些 API 规范时,尤其是使用 Java EE/Jakarta EE API,例如 JPA,直到 Java SE 8,库添加具有范围的依赖项是 Maven 最佳实践provided
:
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<scope>provided</scope>
</dependency>
一方面,这会导致更小的 WAR-/EAR-文件,因为应用程序服务器已经提供了 API 类。
但在其他用例中,例如 Spring Boot 应用程序,这是最佳实践,因为 API 类在各种 JAR 中可用(例如也在 javaee-api 中)并且通常取决于实现提供者。
当我们将 requries 语句添加到模块信息时,例如:
requires java.persistence;
这将需要一个特定的模块,而不是一个包(与Import-Package
OSGi 不同)。并且不应该由多个模块提供同一个包,AFAIK(没有拆分包)。
那么provided
Maven的范围还有用吗?我们应该如何处理这些情况?
好的,我来宾它仍然可以用于减少 WAR-/EAR-文件的大小,但前提是应用程序服务器包含完全相同的模块。
我想在模块化世界中,将来只有一个 API 类模块,对吗(这可能不是一件坏事)?
java-ee/jakarta-ee 模块将使用requries transitive
语句而不是包含类本身?