java - 假如 依赖和weblogic?
问题描述
如果这个问题是指一个常见的问题,我很抱歉,但我觉得这很抽象,并且不能真正为它组成一个好的谷歌搜索词。
我正在尝试了解并找到 maven 中提供的依赖项的用例。我的想法是这样的:
比方说,我有 3 个 maven 项目:A、B、C
- B 是一个 api,如 JPA
- C是让我们说为了争论,Hibernate
- A 对 B 具有提供的依赖项
如果我在同一个 Weblogic 域/服务器上部署 A 和 C。A 会将类路径上的 C 视为 B 的实现吗?
如果不是,那么提供的作用域依赖项的好的用例是什么?
提前致谢
解决方案
正如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-Module 在 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 文件中,并且你将确保这个模块在运行时自己可用。
推荐阅读
- flutter - 在 Debug 模式下工作正常 vs Build APK 不工作,Flutter
- r - 使用 dplyr 在除某些列之外的所有列中发生变异
- javascript - 如何使 PUG 中的按钮激活将数据发送到 mysql 服务器的功能
- java - 无法连接到 Heroku Web Socket 服务器
- python - 带有Checkbutton的Python Tkinter IntVar不起作用
- html - 由于-webkit-overflow-scrolling,第二个模态显示iOS Safari上第一个模态的关闭按钮:触摸
- wordpress - 如何在 wordpress 移动应用程序中使用自定义块?
- phpstorm - 为什么 tailwindcss 支持在 PhpStorm 2019.3.4 中不起作用?
- twilio - Twilio 可编程语音自定义参数问题
- vue.js - Storybook 和 Vue JS:组件的文档方法