我有一个用于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解决方案非常适合一个排除(如示例所示),但在我的实际场景中,我有多个排除项,并且为每个排除项添加额外的依赖项似乎很臭。似乎有效的解决方案是将显示的依赖关系的范围设置为 compile ,然后创建第二个依赖关系相同的工件(mygroup.myartifact),没有排除,并且范围设置为 test 。由于拉尔斯都正确地回答了我的措辞不当,并且引导我朝着实际解决的方向发展,我将把他的回答标记为答案。
答案 0 :(得分:7)
在依赖项中使用“scope”标记。
<scope>test</scope>
http://maven.apache.org/pom.html#Dependencies
编辑:如果我正确理解您的配置,则应在mygroup.myartifact POM中添加您需要添加的scope = test。这样你可以测试包含jdbc jar的工件,但是当其他POMS想要包含mygroup.myartifact时,它们不会将jdbc作为传递依赖项包含在内。
第二次编辑:好的,如果你不控制要包含的POM - 像你已经做的那样进行排除,然后将jdbc添加为新的依赖项,其中scope = test。