依赖注入和测试

Dependency injection and Tests

我有一个包含一些测试的项目,它所做的只是创建一个 test-jar 以供其他项目 运行 使用。它依赖于另一个神器,我们称之为神器 X

然后还有多个其他项目运行test-jar,使用maven-surefire-plugin

我有多个工件 X 的实现,我想做的是能够 运行 使用我想要的实现来进行这些测试,而不是 X

例如:

在项目 A 中,我想 运行 使用实现的测试 A

在项目 B 中,我想 运行 使用实现的测试 B

这似乎是不可能的,因为一旦 test-jar 生成,它就会在其中硬编码工件 X

所以我愿意接受任何其他解决方案

编辑:

额外信息:

生成测试的项目的 pom 文件:

生成test-jar

的部分
<build>
    <plugins>
        <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>

工件 X 依赖项:

<dependency>
        <groupId>com.conztanz</groupId>
        <artifactId>X</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

其中一个项目的 pom 文件 运行ning 测试(项目 A):

    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.15</version>
            <configuration>
                <dependenciesToScan>
                    <dependency>testJar</dependency>
                </dependenciesToScan>
            </configuration>
        </plugin>
    </plugins>
</build>

理想情况下,我想要的是做一些事情,告诉项目 AOverride 工件 X 和它自己的实现

我希望这现在更有意义

我认为您正在寻找名为 provided.

scope

依赖关系如下所示:

<dependency>
    <groupId>com.conztanz</groupId>
    <artifactId>X</artifactId>
    <version>1.0-SNAPSHOT</version>
    <scope>provided</scope>
</dependency>

这告诉 Maven:"Hey, I need this to compile, but don't include it in the target output, because a container (or something) will provide the jar itself."