2

我有一个用于 Web 服务的 Maven POM 文件。对于其中一个依赖项,我必须为 jar 文件指定几个排除项,这些 jar 文件已经保存在 Web 应用程序服务器的更高级别(所有 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 下面的解决方案非常适合一个排除项(如示例所示),但是在我的实际场景中,我有多个排除项,并且为每个排除项添加额外的依赖项似乎很臭。似乎可行的解决方案是将显示的依赖项的范围设置为编译,然后创建第二个依赖项,该依赖项是相同的工件(mygroup.myartifact),没有排除项,范围设置为test。由于 Lars 既正确回答了我措辞不佳的问题,也将我引向了实际解决方案的方向,因此我将他的回复标记为答案。

4

1 回答 1

7

在依赖项中使用“范围”标签。

<scope>test</scope>

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

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

第二次编辑:好的,如果您不控制要包含的 POM - 像您已经完成的那样进行排除,然后将 jdbc 添加为新依赖项,范围 = test。

于 2008-09-25T11:08:48.503 回答