Maven测试依赖的依赖性

时间:2013-03-27 09:43:31

标签: unit-testing maven scope dependencies

我有一个父项目,它与范围 test

有依赖关系
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-firefox-driver</artifactId>
        <version>2.31.0</version>
        <scope>test</scope>
    </dependency>

现在,当我将这个父项目作为依赖项包含在我的子项目中时,我“安装”了父项目

    <dependency>
        <groupId>group</groupId>
        <artifactId>parentproject</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

selenium-firefox-driver不可用。 编译范围内的依赖项可用。

如何使其可用?我不会在父项目和子项目中更改范围。因为我在运行时需要一些父类

3 个答案:

答案 0 :(得分:3)

您应该将父项目作为您孩子pom的parent,而不是将父项目包含在您的子pom中作为依赖项。

<parent>
   <groupId>group</groupId>
   <artifactId>parentproject</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</parent>

你不能称之为parent project

答案 1 :(得分:2)

正如Charlee Chitsuk在他的回答中所述,你的范围(子项目中的 compile )将省略所包含项目的 test 依赖关系。

一个干净的解决方案是将项目的关注点分成两个独立的项目:

  • parent-test:此项目包含具有编译范围的测试依赖项(例如selenium-firefox-driver)。此外,该项目包含所有通用测试资源,例如: JUnit基类,在src/main/java中。
  • parent-business:此项目仅包含父项目的业务功能。在parent-test范围内添加test

在您的子项目中,您现在可以包含parent-test范围 test ,让您可以访问具有正确范围的资源。

此设置将提供清晰的项目结构和干净的范围,避免您提到的问题。是的,由于额外的项目,它有点复杂,但它也更清洁。

答案 2 :(得分:0)

Dependency Scope告诉compile是默认范围,如果没有指定则使用。它以不同的方式影响传递依赖。通过概述,如果依赖关系是compile范围,则将省略传递test范围。请在Maven: The Complete Reference: Project Dependencies了解更多信息。