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

如果这个问题是指一个常见的问题,我很抱歉,但我觉得这很抽象,并不能真正为它构成一个好的谷歌搜索词。

我正在尝试理解并找到 maven 中提供的依赖项的用例。我的想法是这样的:

比方说,我有 3 个 Maven 项目:A、B、C

  • B 是一个 api,就像 JPA

  • C 是为了争论而说,Hibernate

  • A 对 B 有提供的依赖

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

如果不是,那么提供的作用域依赖的良好用例是什么?


慕哥6287543
浏览 151回答 1
1回答

ABOUTYOU

正如Maven 文档规定的范围所提供的:这很像 compile,但表明您希望 JDK 或容器在运行时提供依赖项。例如,在为 Java Enterprise Edition 构建 Web 应用程序时,您可以将对 Servlet API 和相关 Java EE API 的依赖项设置为提供的范围,因为 Web 容器提供这些类。此范围仅在编译和测试类路径上可用,并且不可传递。那里已经提到了一个用例:在构建稍后要部署在 JavaEE 应用程序服务器上的 JavaEE 应用程序时,应用程序服务器提供了 javaEE 实现。因此,要告诉 Maven 您在编译时需要此依赖项但稍后未打包到项目中,您将使用提供的范围,例如:<dependency>&nbsp; &nbsp; <groupId>javax</groupId>&nbsp; &nbsp; <artifactId>javaee-api</artifactId>&nbsp; &nbsp; <version>7.0</version>&nbsp; &nbsp; <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>&nbsp; &nbsp; <groupId>your.group</groupId>&nbsp; &nbsp; <artifactId>my-ejb</artifactId>&nbsp; &nbsp; <type>ejb</type>&nbsp; &nbsp; <scope>provided</scope></dependency>这样你就告诉 maven 你想使用你的 EJB 模块,但它不应该把它打包到你的 war 文件中,你将确保这个模块在运行时自己可用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java