首页 > 解决方案 > 假如依赖和weblogic?

问题描述

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

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

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

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

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

提前致谢

标签: javamaven

解决方案


正如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 文件中,并且你将确保这个模块在运行时自己可用。


推荐阅读