为了账号安全,请及时绑定邮箱和手机立即绑定

<scope>provided</scope> 依赖和weblogic?

<scope>provided</scope> 依赖和weblogic?

慕哥6287543 2021-11-11 16:19:24
如果这个问题是指一个常见的问题,我很抱歉,但我觉得这很抽象,并不能真正为它构成一个好的谷歌搜索词。我正在尝试理解并找到 maven 中提供的依赖项的用例。我的想法是这样的:比方说,我有 3 个 Maven 项目:A、B、CB 是一个 api,就像 JPAC 是为了争论而说,HibernateA 对 B 有提供的依赖如果我在同一个 Weblogic 域/服务器上部署 A 和 C。A 会将类路径上的 C 视为 B 的实现吗?如果不是,那么提供的作用域依赖的良好用例是什么?
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

正如Maven 文档规定的范围所提供的:

这很像 compile,但表明您希望 JDK 或容器在运行时提供依赖项。例如,在为 Java Enterprise Edition 构建 Web 应用程序时,您可以将对 Servlet API 和相关 Java EE API 的依赖项设置为提供的范围,因为 Web 容器提供这些类。此范围仅在编译和测试类路径上可用,并且不可传递。

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

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

<dependency>

    <groupId>javax</groupId>

    <artifactId>javaee-api</artifactId>

    <version>7.0</version>

    <scope>provided</scope>

</dependency>

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


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


因此,在您的 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 文件中,你将确保这个模块在运行时自己可用。


查看完整回答
反对 回复 2021-11-11
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信