战争文件的Maven依赖关系排除在外,而测试则包括在内

时间:2020-03-06 14:42:53  来源:igfitidea点击:

我有一个用于Web服务的Maven POM文件。对于依赖项之一,我必须为已经保存在Web应用程序服务器中较高级别的jar文件指定几个排除项(所有Web应用程序都可以访问,而不仅仅是特定的访问)。这种排除的一个示例是包含我的JDBC驱动程序的JAR。

示例(包含虚构的详细信息):

<dependency>
    <groupId>mygroup</groupId>
     <artifactId>myartifact</artifactId>
     <version>1.0.0</version>
     <exclusions>
         <!--The jdbc driver causes hot-deployment issues-->
         <exclusion>
             <groupId>db.drivers</groupId>
             <artifactId>jdbc</artifactId>
         </exclusion>
     </exclusions>
 </dependency>

我遇到的问题是我的测试需要JDBC驱动程序。由于无法加载JDBC驱动程序,因此我的测试当前失败。

如何配置POM,以使排除的零件可以通过我的测试访问,但不包含在我的WAR文件中?

更新:我无法更改mygroup.myartifact的POM,因为它受许多其他项目的依赖,并且此排除要求对我的项目是唯一的。

更新2:看来我对这个问题的措辞很差。下面的Lars解决方案非常适合一个排除项(如示例所示),但是在我的实际场景中,我有多个排除项,并且为每个排除项添加额外的依赖项似乎很臭。似乎可行的解决方案是将显示的依赖项的范围设置为可编译,然后创建第二个依赖项,即没有排除项且将范围设置为test的相同工件(mygroup.myartifact)。由于Lars都正确回答了我措辞不佳的问题,并引导我朝着实际解决方案的方向发展,因此我将他的回答标记为答案。

解决方案

在依赖项中使用" scope"标签。

<scope>test</scope>

http://maven.apache.org/pom.html#Dependencies

编辑:如果我正确理解配置,则需要添加的scope = test应该添加到mygroup.myartifact POM中。这样,我们可以使用包含的jdbc jar测试该工件,但是总是在其他POMS要包含mygroup.myartifact时,它们不会将jdbc作为传递依赖项包含在内。

第二次编辑:好的,如果我们不控制要包含的POM,请像已经做的那样进行排除,然后使用scope = test将jdbc添加为新的依赖项。