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

时间:2016-04-28 09:32:47

标签: java maven junit

在处理当前版本的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>

第二个问题是我们在运行时根据API模块有其他模块(如junit和testng)(因为类在运行时加载,只有一个工件可以在类路径中使用)。因此,在运行测试时,只应包含一个模块作为依赖项。

对于构建/测试时间,我已使用配置文件解决了它。我创建了两个配置文件&#34; mockito&#34;和&#34; mockito2&#34;并且构建运行两次。

根pom.xml

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

powermock-modules-test-mockito pom.xml (但我们还有其他模块也取决于这种方式)

<profiles>
        <profile>
            <id>mockito</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>org.powermock</groupId>
                    <artifactId>powermock-api-mockito-common</artifactId>
                    <version>${project.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.powermock</groupId>
                    <artifactId>powermock-api-mockito</artifactId>
                    <version>${project.version}</version>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>mockito2</id>
            <dependencies>
                <dependency>
                    <groupId>org.powermock</groupId>
                    <artifactId>powermock-api-mockito-common</artifactId>
                    <version>${project.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.powermock</groupId>
                    <artifactId>powermock-api-mockito2</artifactId>
                    <version>${project.version}</version>
                </dependency>
            </dependencies>
        </profile>
    </profiles>

个人资料的依赖树&#34; mockito&#34;并进行验收测试

[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

个人资料的依赖树&#34; mockito&#34;并进行验收测试

[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

在释放电动摇枕之前,这很好用。 maven发布插件与名为发布的配置文件一起使用,但问题是我们要发布对&#34; mockito&#34;的支持。和&#34; mockito2&#34;同时。但由于配置文件冲突,我们无法在理智的时候应用这两个配置文件。发布过程应该只执行一次,因此我无法运行release for&#34; mockito&#34;然后另一个用于&#34; mockito2&#34;。

我知道一个看起来像这样的解决方法:

  1. 添加&#34;发布&#34;配置文件到API pom.xml和其他具有相同结构的模块(子模块严格依赖于其中一个模块 mockito版本和mockito api)
  2. 使用&#34; mockito&#34;运行安装并跳过测试
  3. 运行测试
  4. 使用&#34; mockito2&#34;运行安装并跳过测试
  5. 运行测试
  6. 运行发布:准备...但不知何故跳过编译阶段至少为 &#34; powermock-API&#34;模块。
  7. 但我再次预计第6步会遇到很大的麻烦。

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

0 个答案:

没有答案