Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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
Java 使用不同的依赖项和模块运行Maven构建/测试_Java_Maven_Junit - Fatal编程技术网

Java 使用不同的依赖项和模块运行Maven构建/测试

Java 使用不同的依赖项和模块运行Maven构建/测试,java,maven,junit,Java,Maven,Junit,在编写当前版本的PowerMock时,我们面临一个问题。我们准备发布对Mockito 2的支持,它与Mockito 1完全不同。因此,我们向PowerMock添加了一个新模块:“PowerMock-api-mockito2” 第一个问题是,powermock api模块包含两个子模块: powermock api mockito powermock-api-mockito2 并且一次只能编译一个模块,因为每个模块都依赖于mockito的特定版本,并且如果将mockito的两个版本都添加到类路

在编写当前版本的PowerMock时,我们面临一个问题。我们准备发布对Mockito 2的支持,它与Mockito 1完全不同。因此,我们向PowerMock添加了一个新模块:“PowerMock-api-mockito2”

第一个问题是,powermock api模块包含两个子模块:

  • powermock api mockito
  • powermock-api-mockito2
并且一次只能编译一个模块,因为每个模块都依赖于mockito的特定版本,并且如果将mockito的两个版本都添加到类路径中,则无法编译

API模块pom.xml

 <profiles>
        <profile>
            <id>mockito</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <modules>
                <module>mockito</module>
            </modules>
        </profile>
        <profile>
            <id>mockito2</id>
            <modules>
                <module>mockito2</module>
            </modules>
        </profile>
    </profiles>
<profiles>
        <profile>
            <id>mockito</id>
            <properties>
                <mockito.version>1.10.19</mockito.version>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>mockito2</id>
            <properties>
                <mockito.version>2.0.42-beta</mockito.version>
            </properties>
        </profile>
</profiles>
配置文件“mockito”和验收测试的依赖关系树

[INFO] org.powermock:powermock-modules-test-mockito:pom:1.6.5-SNAPSHOT
[INFO] +- org.powermock.tests:powermock-tests-utils:jar:1.6.5-SNAPSHOT:test
[INFO] |  +- org.powermock:powermock-core:jar:1.6.5-SNAPSHOT:compile
[INFO] |  |  +- org.powermock:powermock-reflect:jar:1.6.5-SNAPSHOT:compile
[INFO] |  |  \- org.javassist:javassist:jar:3.20.0-GA:compile
[INFO] |  \- javax.servlet:servlet-api:jar:2.5:test
[INFO] +- org.assertj:assertj-core:jar:3.4.1:test
[INFO] +- org.powermock:powermock-api-mockito-common:jar:1.6.5-SNAPSHOT:compile
[INFO] |  +- org.mockito:mockito-core:jar:1.10.19:compile
[INFO] |  |  \- org.objenesis:objenesis:jar:2.2:compile
[INFO] |  +- org.hamcrest:hamcrest-core:jar:1.3:compile
[INFO] |  \- org.powermock:powermock-api-support:jar:1.6.5-SNAPSHOT:compile
[INFO] \- org.powermock:powermock-api-mockito:jar:1.6.5-SNAPSHOT:compile
[INFO] org.powermock:powermock-modules-test-mockito:pom:1.6.5-SNAPSHOT
[INFO] +- org.powermock.tests:powermock-tests-utils:jar:1.6.5-SNAPSHOT:test
[INFO] |  +- org.powermock:powermock-core:jar:1.6.5-SNAPSHOT:compile
[INFO] |  |  +- org.powermock:powermock-reflect:jar:1.6.5-SNAPSHOT:compile
[INFO] |  |  \- org.javassist:javassist:jar:3.20.0-GA:compile
[INFO] |  \- javax.servlet:servlet-api:jar:2.5:test
[INFO] +- org.assertj:assertj-core:jar:3.4.1:test
[INFO] +- org.powermock:powermock-api-mockito-common:jar:1.6.5-SNAPSHOT:compile
[INFO] |  +- org.mockito:mockito-core:jar:2.0.42-beta:compile
[INFO] |  |  +- net.bytebuddy:byte-buddy:jar:1.2.1:runtime
[INFO] |  |  \- org.objenesis:objenesis:jar:2.2:compile
[INFO] |  +- org.hamcrest:hamcrest-core:jar:1.3:compile
[INFO] |  \- org.powermock:powermock-api-support:jar:1.6.5-SNAPSHOT:compile
[INFO] \- org.powermock:powermock-api-mockito2:jar:1.6.5-SNAPSHOT:compile
在发布powermock之前,这一切都很好。maven release插件与名为release的概要文件一起使用,但问题是我们希望同时发布对“mockito”和“mockito2”的支持。但是由于配置文件冲突,我们不能同时应用两个配置文件。发布过程应该只执行一次,所以我不能为“mockito”运行
release
,然后为“mockito2”运行另一个

我有这样一个解决方案的想法:

  • 将“release”概要文件添加到API pom.xml和其他具有相同结构的模块中(子模块严格依赖于其中一个模块的模块) mockito版本和mockito api)
  • 使用“mockito”运行安装并跳过测试
  • 运行测试
  • 使用“mockito2”运行安装并跳过测试
  • 运行测试
  • 运行发布:准备。。。但不知何故,至少跳过了编译阶段 “powermock api”模块
  • 但我还是希望第六步会有大麻烦


    如何解决这些问题?是否可以使用不同的依赖项运行相同的测试?步骤6可行吗?

    在不同的模块中使用不同的依赖项。所以一个模块包含mockito和另一个mockito2。@khmarbaise这是不可能的。一个模块可能依赖于Mockito的两个版本之一,因为例如,用户可以将jUnit与Mockito 1或Mockito 2一起使用。在运行时,jUnit模块依赖于用户放在类路径中的模块。所以测试应该和这两个模块一起运行。在不同的模块中使用不同的依赖项。所以一个模块包含mockito和另一个mockito2。@khmarbaise这是不可能的。一个模块可能依赖于Mockito的两个版本之一,因为例如,用户可以将jUnit与Mockito 1或Mockito 2一起使用。在运行时,jUnit模块依赖于用户放在类路径中的模块。所以测试应该和这两个模块一起运行。
    [INFO] org.powermock:powermock-modules-test-mockito:pom:1.6.5-SNAPSHOT
    [INFO] +- org.powermock.tests:powermock-tests-utils:jar:1.6.5-SNAPSHOT:test
    [INFO] |  +- org.powermock:powermock-core:jar:1.6.5-SNAPSHOT:compile
    [INFO] |  |  +- org.powermock:powermock-reflect:jar:1.6.5-SNAPSHOT:compile
    [INFO] |  |  \- org.javassist:javassist:jar:3.20.0-GA:compile
    [INFO] |  \- javax.servlet:servlet-api:jar:2.5:test
    [INFO] +- org.assertj:assertj-core:jar:3.4.1:test
    [INFO] +- org.powermock:powermock-api-mockito-common:jar:1.6.5-SNAPSHOT:compile
    [INFO] |  +- org.mockito:mockito-core:jar:2.0.42-beta:compile
    [INFO] |  |  +- net.bytebuddy:byte-buddy:jar:1.2.1:runtime
    [INFO] |  |  \- org.objenesis:objenesis:jar:2.2:compile
    [INFO] |  +- org.hamcrest:hamcrest-core:jar:1.3:compile
    [INFO] |  \- org.powermock:powermock-api-support:jar:1.6.5-SNAPSHOT:compile
    [INFO] \- org.powermock:powermock-api-mockito2:jar:1.6.5-SNAPSHOT:compile