2015-10-16 100 views
2

当我使用Maven构建项目时,范围test的依赖关系在integration-test阶段似乎超出了范围。这是否是有意设计的,或者是否有什么我可以做的,以便在integration-test阶段包含范围为test的依赖关系?依赖性“测试”范围是否适用于Maven中的“集成测试”阶段?

One answer here on SO表明测试依赖性在集成测试阶段的范围内,但答案只是一个没有引用的语句。但是,这似乎并不是Maven如何为我工作的。

当我将给定的依赖关系的范围从test更改为compile时,在integration-tes t阶段期间给定的依赖关系(如预期)可用。

如若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

请发布一个可重现问题的POM。 – Tunaki

+0

@Tunaki问题更新了POM的相关部分 – sbrattla

+0

在您的POM中,有2个绑定阶段 - “预集成测试”和“后整合测试”。这两个显然不是'集成测试',所以显然maven并没有对它们使用'test'范围。尽管如此,我从来没有在maven文档中看到阶段范围映射。我做了一些测试,并得出了结论 - maven仅使用'compile-scope'进行'pre-integration-test'阶段 – Eugene

回答

1

根据maven-failsafe-pluginintegration-test魔力文件建立(link)和源代码(link)它确实需要在test范围解决依赖性。换句话说,并不是决定使用哪个依赖范围的阶段,而是实际使用的mojo。

在你的情况mockserver-maven-pluginstart的魔力确实只需要在compile+runtime范围(link)解决依赖性,而stop魔力需要的默认分辨率runtime范围(link)。有关更多详细信息,请参阅Maven Mojo API文档中的requiresDependencyResolution描述符(link)。

如果你在今后发生类似的问题,我建议你打印出effective pom了解的Maven如何解释您的配置,或以其他方式-X标志运行Maven,这样你可以看到每个魔力实际的类路径。 Maven文档有时可能不明确,但这样你至少可以确定Maven是如何在实践中工作的。