War文件的Maven依赖项排除,但包含在测试中

时间:2008-09-25 10:57:13

标签: java deployment maven-2

我有一个用于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 。由于拉尔斯都正确地回答了我的措辞不当,并且引导我朝着实际解决的方向发展,我将把他的回答标记为答案。

1 个答案:

答案 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。