如果这个问题是指一个常见的问题,我很抱歉,但是我发现这个问题相当抽象,而且不能为它提供一个很好的谷歌搜索词。
我正在努力理解并找到maven中提供的依赖项的用例。我的想法是:
比方说,我有3个maven项目: A,B,C
如果我在同一个Weblogic域/服务器上部署A和C。A会在类路径上看到C作为B的实现吗?
如果不是,对于所提供的作用域依赖项,什么是好的用例?
提前感谢
发布于 2018-10-11 15:01:35
正如maven文档为作用域规定的那样:
这与编译非常相似,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为构建web应用程序时,您将将对Servlet和相关Java的依赖设置为提供的范围,因为web容器提供了这些类。此范围仅在编译和测试类路径上可用,且不可传递。
其中已经提到了一个用例:当构建以后希望部署到JavaEE应用服务器上的JavaEE应用程序时,application提供了javaEE实现。
因此,要告诉maven您在编译时需要这个依赖项,但以后没有打包到项目中,您可以使用如下所提供的范围:
<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应用程序中,您可以将依赖项添加为
<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文件中,并且您将确保这个模块在运行时是可用的。
https://stackoverflow.com/questions/52757056
复制相似问题