gpt4 book ai didi

unit-testing - 在多模块项目中,maven 模块可以访问它所依赖的另一个模块的传递测试范围依赖项吗?

转载 作者:行者123 更新时间:2023-12-04 02:50:26 25 4
gpt4 key购买 nike

我有一个多模块 Maven+Spring 项目。一些模块依赖于其他模块。

假设我们有一个名为 services 的模块这取决于名为 persistence 的模块.

服务模块:

  • 在 Spring 级别,导入 persistence上下文
  • 在 Maven 级别,取决于 persistence模块
  • persistence模块定义了一些与......持久性相关的配置:数据源,JPA,事务......

    它有一些用于测试数据库(JDBC 驱动程序、DBCP、H2)的依赖项,这些依赖项仅限于测试范围,因为当应用程序部署时,DataSource 将在容器(Tomcat)中定义并通过 JNDI 访问。

    现在,我想在 services 的 Maven 测试阶段访问。模块,到 persistence 的测试范围(传递)依赖项模块。

    Maven manual (Table 3.1)说通常情况下,测试范围依赖项是不可传递的。

    是否有可能在多模块项目的上下文中以某种方式获得它们?

    如果不是什么是好的选择? (在父 pom 中定义测试依赖项?...)

    最佳答案

    我确切地找到了它应该如何工作,即 生成测试 JAR ,这是一种 Artifact ,在被其他模块用作依赖项的模块中,在我们的示例中是持久性模块:

    <build>
    <plugins>

    <!-- Generate test jar too -->
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <executions>
    <execution>
    <goals>
    <goal>test-jar</goal>
    </goals>
    </execution>
    </executions>
    </plugin>

    </plugins>
    </build>

    然后通过将此测试 jar 声明为另一个模块的测试范围依赖项,在我们的示例中为 services模块 :
    <!-- Services module -->
    <dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>services</artifactId>
    <version>${project.version}</version>
    </dependency>
    <dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>services</artifactId>
    <version>${project.version}</version>
    <type>test-jar</type>
    <scope>test</scope>
    </dependency>

    注意除了 type 之外,第二个依赖项与第一个依赖项相同。设置为 test-jar对于 scope即设置为测试。

    现在,您可以想象 service 中编写的测试模块可以访问 persistence 的测试类模块 ( 这有效 )但也适用于持久性模块的测试范围依赖项。

    但是,这是一个已知问题 ( https://issues.apache.org/jira/browse/MNG-1378),它不能以这种方式工作。它自 2005 年以来一直开放,所以我认为它不会在不久的将来修复……但谁知道呢。

    我只需要复制两个模块上的测试范围依赖项,或者只是在父 pom 中定义它们...

    关于unit-testing - 在多模块项目中,maven 模块可以访问它所依赖的另一个模块的传递测试范围依赖项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15816805/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com