【问题标题】:Maven: How do I include a dependency in test phase and exclude it in integration-test phase?Maven:如何在测试阶段包含依赖项并在集成测试阶段排除它?
【发布时间】:2012-01-04 04:30:23
【问题描述】:

我正在使用 Maven 3.0.3。
是否可以仅包含我的测试阶段的依赖项,然后仅包含我的集成阶段的另一个依赖项?当这两个依赖包含在一起时

<dependency> 
    <groupId>com.google.gwt</groupId> 
    <artifactId>gwt-dev</artifactId> 
    <version>${gwtVersion}</version> 
    <scope>test</scope> 
</dependency> 
... 
<dependency> 
    <groupId>org.seleniumhq.selenium</groupId> 
    <artifactId>selenium-java</artifactId> 
    <version>2.13.0</version> 
    <scope>test</scope> 
</dependency> 

我在运行 Selenium 集成测试时收到 java.lang.NoSuchMethodError: org.apache.http.conn.scheme.Scheme.&lt;init&gt; 错误。当 GWT 依赖项被排除时,Selenium 测试运行。我仍然需要测试阶段的 GWT 依赖项。

【问题讨论】:

标签: maven dependencies maven-2


【解决方案1】:

我建议有单独的项目和测试用例

【讨论】:

    【解决方案2】:

    关于给出的答案,我最喜欢的答案是在我的故障安全插件执行中简单地添加一个“classpathDependencyExcludes”......

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.10</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>**/integration/**</include>
                            </includes>
                            <systemPropertyVariables>
                                <tomcat.port>${tomcat.servlet.port}</tomcat.port>
                                <project.artifactId>${project.artifactId}</project.artifactId>
                            </systemPropertyVariables>
                            <classpathDependencyExcludes>
                                <classpathDependencyExcludes>com.google.gwt:gwt-dev</classpathDependencyExcludes>
                            </classpathDependencyExcludes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    

    这确保了在运行集成测试阶段时不会出现有问题的依赖项(在本例中为 gwt-dev)。

    【讨论】:

      【解决方案3】:

      使用profiles。配置文件允许您根据 -P 命令行选项的参数添加依赖项。

      【讨论】:

      • 您能否提供一个示例,说明如何在测试阶段激活一个配置文件,在集成测试阶段激活另一个配置文件?另外,无论如何,这样我就不必在命令行上明确指定配置文件(例如-P testProfile,integrationTestProfile)?第一个问题更重要——第二个问题只是“很高兴拥有”。
      • 使用mvn help:effective-pom 来查看使用各种-P 选项会得到什么。要自动启用/禁用配置文件,我建议使用&lt;file&gt; 元素,它会在文件存在或丢失时激活配置文件。请参阅文档。这允许您在构建服务器上运行 IT 并在开发 PC 上跳过它们,除非您特别要求它们。编写几个批处理脚本也会有所帮助。
      【解决方案4】:

      Maven 配置文件中的不同依赖集是实现此目的的唯一方法,因为“测试”范围 包含“测试”和“集成测试”阶段

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多