【问题标题】:Maven test dependencies of dependencymaven测试依赖的依赖
【发布时间】:2013-03-27 18:54:28
【问题描述】:

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

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

现在我“mvn install”了父项目,当我将此父项目作为依赖项包含在我的子项目中时

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

selenium-firefox-driver 不可用。 compile 范围的依赖项可用。

我怎样才能使它可用?我不会在父项目和子项目中更改范围。因为我在运行时需要一些父类的类

【问题讨论】:

    标签: unit-testing maven scope dependencies


    【解决方案1】:

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

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

    • parent-test:此项目包含您的测试依赖项(例如 selenium-firefox-driver),其范围为 compile。此外,该项目包含您所有的通用测试资源,例如JUnit 基类,位于src/main/java
    • parent-business:该项目仅包含父项目的业务功能。在此处包含 parent-testtest 范围。

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

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

    【讨论】:

      【解决方案2】:

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

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

      否则你不能称它为parent project

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2014-10-20
          • 2012-03-02
          • 1970-01-01
          • 2012-08-16
          • 1970-01-01
          • 2014-07-26
          • 1970-01-01
          • 2012-08-15
          • 1970-01-01
          相关资源
          最近更新 更多