依赖性“测试”范围是否适用于Maven中的“集成测试”阶段?

时间:2015-10-16 07:48:50

标签: java maven dependencies integration-testing

当我使用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阶段中的测试范围依赖项,我仍然很好奇。

1 个答案:

答案 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在实践中是如何工作的。