Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven:我如何在测试阶段包含依赖项并在集成测试阶段排除它?_Maven_Dependencies_Maven 2 - Fatal编程技术网

Maven:我如何在测试阶段包含依赖项并在集成测试阶段排除它?

Maven:我如何在测试阶段包含依赖项并在集成测试阶段排除它?,maven,dependencies,maven-2,Maven,Dependencies,Maven 2,我正在使用Maven 3.0.3。 是否可以只包含测试阶段的依赖项,然后只包含集成阶段的另一个依赖项?当这两个依赖项包含在一起时 <dependency> <groupId>com.google.gwt</groupId> <artifactId>gwt-dev</artifactId> <version>${gwtVersion}</version> <scope&

我正在使用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> 

com.google.gwt
gwt开发
${gwtVersion}
试验
... 
org.seleniumhq.selenium
硒爪哇
2.13.0 
试验

运行Selenium集成测试时,我得到一个
java.lang.NoSuchMethodError:org.apache.http.conn.scheme.scheme.
错误。排除GWT依赖项后,将运行Selenium测试。我仍然需要测试阶段的GWT依赖项,tho.

Maven概要文件中的不同依赖项集是实现这一点的唯一方法,因为“测试”范围包含了“测试”和“集成测试”阶段的使用。配置文件允许您根据
-P
命令行选项的参数添加依赖项。

关于给出的答案,我最喜欢的是简单地将“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>

org.apache.maven.plugins
maven故障保护插件
2.10
集成测试
验证
**/整合/**
${tomcat.servlet.port}
${project.artifactId}
gwt:gwtdev

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

我建议使用测试用例创建单独的项目

创建两个不同的概要文件如何?您是否尝试过运行“mvn dependency:tree”,并查看在这两种情况下您的依赖项会发生什么情况?可能由于某种原因,您获得了错误的Apache HttpClient版本?能否提供一个示例,说明如何在测试阶段激活一个概要文件,以及如何在集成测试阶段激活另一个概要文件?另外,无论如何,我都不需要在命令行上显式地指定概要文件(例如,-P testProfile、integrationTestProfile)?第一个问题更重要——第二个问题只是一个“很好的选择”。使用
mvn帮助:有效的pom
来查看各种
-P
选项可以得到什么。要自动启用/禁用配置文件,我建议使用
元素,该元素在文件存在或丢失时激活配置文件。见文件。这允许您在构建服务器上运行ITs,并在开发PC上跳过它们,除非您特别请求它们。另外,编写几个批处理脚本也会有所帮助。