2

我有一个父项目,它与范围测试有依赖关系

    <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不可用。编译范围的依赖项可用。

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

4

3 回答 3

4

正如 Charlee Chitsuk 在他的回答中概述的那样,您的范围(在子项目中编译)将省略包含项目的测试依赖项。

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

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

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

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

于 2013-03-27T10:54:28.233 回答
3

与其将父项目作为依赖项包含在子 pom 中,不如将父项目作为parent子 pom 的。

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

你不能把它称为parent project其他。

于 2013-03-27T10:38:42.673 回答
1

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

于 2013-03-27T10:24:18.510 回答