gpt4 book ai didi

java - provided依赖和weblogic?

转载 作者:行者123 更新时间:2023-12-02 01:52:38 26 4
gpt4 key购买 nike

如果这个问题涉及的是一个常见问题,我很抱歉,但我发现这个问题非常抽象,并且无法真正为其构建一个好的 Google 搜索词。

我试图理解并找到 Maven 中提供的依赖项的用例。我的想法是这样的:

假设我有 3 个 Maven 项目:A、B、C

  • B 是一个 api,如 JPA
  • 为了便于讨论,我们可以说 C 是 Hibernate
  • A 提供了对 B 的依赖

如果我将 A 和 C 部署在同一个 Weblogic 域/服务器上。 A 会将类路径上的 C 视为 B 的实现吗?

如果不是,那么所提供的范围依赖项的良好用例是什么?

提前致谢

最佳答案

作为maven documentation规定提供的范围:

This is much like compile, but indicates you expect the JDK or a container to provide the dependency at runtime. For example, when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided because the web container provides those classes. This scope is only available on the compilation and test classpath, and is not transitive.

其中已经提到了一个用例:当构建稍后要部署在 JavaEE 应用程序服务器上的 JavaEE 应用程序时,应用程序服务器提供了 javaEE 实现。

因此,要告诉 Maven 您在编译时需要此依赖项,但稍后不会打包到项目中,您将使用提供的范围,如下所示:

<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>

另一个用例是构建使用不同容器类型的 JavaEE 应用程序时。有一个JavaEE EJB and a Web Container并且您需要确保您的类不会打包/加载到错误的容器中,甚至不会加载到两个容器中,因为这可能会给您的应用程序和类加载器带来各种问题。

假设您正在构建一个既包含 EJB 模块又包含 Web 模块的应用程序,并且您希望 EJB 在 EJB 容器中运行。您还想在 Web 模块中使用 EJB。由于 EJB 在 EJB 容器中运行,而 Web 模块在 Web 容器中运行,因此您不能简单地在 Web 项目中添加具有范围编译的 EJB 依赖项。因为如果您这样做,maven 会将 ejb 打包到 war 文件中,并且 EJB 最终将出现在 Web 容器中。

因此,在您的网络应用程序中,您将添加依赖项

<artifactId>my-web</artifactId>
<packaging>war</packaging>
<dependency>
<groupId>your.group</groupId>
<artifactId>my-ejb</artifactId>
<type>ejb</type>
<scope>provided</scope>
</dependency>

这样,您就告诉 maven 您想要使用您的 EJB 模块,但它不应该将其打包到您的 war 文件中,并且您将确保该模块在运行时自己可用。

关于java - <scope>provided</scope>依赖和weblogic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52757056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com