首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 ><scope>提供了</scope>依赖关系和weblogic?

<scope>提供了</scope>依赖关系和weblogic?
EN

Stack Overflow用户
提问于 2018-10-11 09:47:27
回答 1查看 397关注 0票数 0

如果这个问题是指一个常见的问题,我很抱歉,但是我发现这个问题相当抽象,而且不能为它提供一个很好的谷歌搜索词。

我正在努力理解并找到maven中提供的依赖项的用例。我的想法是:

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

  • B是一个api,类似于JPA。
  • C是为了争论,Hibernate
  • A提供了对B的依赖

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

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

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-11 15:01:35

正如maven文档为作用域规定的那样:

这与编译非常相似,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为构建web应用程序时,您将将对Servlet和相关Java的依赖设置为提供的范围,因为web容器提供了这些类。此范围仅在编译和测试类路径上可用,且不可传递。

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

因此,要告诉maven您在编译时需要这个依赖项,但以后没有打包到项目中,您可以使用如下所提供的范围:

代码语言:javascript
运行
复制
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

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

假设您正在构建一个同时包含EJB模块和web模块的应用程序,并且希望您的EJB在EJB容器中运行。您还希望在web模块中使用您的EJB。由于EJB运行在EJB容器中,而while运行在web容器中,所以不能简单地在web项目中添加范围编译的EJB依赖项。因为如果这样做,maven将将ejb打包到war文件中,EJB将以web容器结束。

因此,在您的web应用程序中,您可以将依赖项添加为

代码语言:javascript
运行
复制
<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文件中,并且您将确保这个模块在运行时是可用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52757056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档