我有一个父项目,它与范围 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
不可用。 编译范围内的依赖项可用。
如何使其可用?我不会在父项目和子项目中更改范围。因为我在运行时需要一些父类
答案 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 依赖关系。
一个干净的解决方案是将父项目的关注点分成两个独立的项目:
selenium-firefox-driver
)。此外,该项目包含所有通用测试资源,例如: JUnit基类,在src/main/java
中。 parent-test
范围内添加test
。在您的子项目中,您现在可以包含parent-test
范围 test ,让您可以访问具有正确范围的资源。
此设置将提供清晰的项目结构和干净的范围,避免您提到的问题。是的,由于额外的项目,它有点复杂,但它也更清洁。
答案 2 :(得分:0)
Dependency Scope告诉compile
是默认范围,如果没有指定则使用。它以不同的方式影响传递依赖。通过概述,如果依赖关系是compile
范围,则将省略传递test
范围。请在Maven: The Complete Reference: Project Dependencies了解更多信息。