当我使用Maven构建项目时,范围test
的依赖关系似乎超出了integration-test
阶段的范围。这是设计,还是我可以做些什么来使test
期间包含范围integration-test
的依赖?
One answer here on SO表明测试依赖项在集成测试阶段处于范围内,但答案只是一个没有引用的语句。但是,这似乎并不是Maven为我工作的方式。
当我将给定依赖项的范围从test
更改为compile
时,给定的依赖关系(在预期中)在integration-tes
阶段可用。
test
范围是否适用于integration-test
阶段,还是必须将依赖范围设置为compile
才能在integration-test
阶段可用?
这是POM
文件的相关部分。我正在做的是我尝试在集成测试阶段启动一个MockServer实例。但是,由于未包含com.company.msd
依赖项,因此失败。
<dependencies>
<dependency>
<groupId>com.company.msd</groupId>
<artifactId>MockServerDemo</artifactId>
<version>0.0.4</version>
<scope>test</scope>
</dependency>
</dependencies>
[...]
<plugin>
<groupId>org.mock-server</groupId>
<artifactId>mockserver-maven-plugin</artifactId>
<version>3.9.17</version>
<configuration>
<serverPort>1080</serverPort>
<proxyPort>1081</proxyPort>
<logLevel>DEBUG</logLevel
<initializationClass>com.company.msd.server.DefaultExpectationInitializer</initializationClass>
</configuration>
<executions>
<execution>
<id>pre-integration-test</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
请注意!如果我将依赖项添加为插件依赖项,它可以工作。但是,如果Maven的设计不包含integration-test
阶段中的测试范围依赖项,我仍然很好奇。
答案 0 :(得分:1)
根据maven-failsafe-plugin
的{{1}} mojo文档(link)和源代码(link),它需要解析integration-test
中的依赖项} 范围。换句话说,它不是确定使用哪个依赖范围而是实际使用的mojo的阶段。
在你的情况下,test
&#39; s mockserver-maven-plugin
mojo确实只需要解决start
范围(link)中的依赖关系,而compile+runtime
mojo需要默认的stop
解析范围(link)。有关详细信息,请参阅Maven Mojo API文档中的runtime
描述符(link)。
如果您将来遇到类似的问题,我建议您打印requiresDependencyResolution
以了解Maven如何解释您的配置,或者以effective pom
标志运行Maven,以便您可以看到实际的类每个魔力的路径。 Maven文档有时可能含糊不清,但这样你至少可以确定Maven在实践中是如何工作的。