2016-07-25 325 views
3

我有一个包含一些测试的项目,它所做的只是创建一个test-jar以由其他项目运行。而且它依赖于一个又一个神器,让我们称之为神器X依赖注入和测试

则是运行test-jar多个其他项目,使用maven-surefire-plugin

我有神器X的多个实现,我想要做的就是能够使用我想要的实现,而不是X

例如要运行这些测试:

项目A我想运行使用实施0123测试

项目 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文件运行测试(项目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与它自己的执行

我希望这是现在更有意义

+1

这对我来说太抽象了。也许你可以发布各种'pom.xml'的相关部分,以及简化的项目结构? – Stewart

+0

好吧我会添加一些例子 – isco

回答

1

我认为你正在寻找的范围称为provided

的依赖应该是这样的:

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

这告诉Maven:“嘿,我需要这个来编译,但不包括在目标输出,因为一个容器(或其它)将提供罐子本身。“

+0

有趣,你认为其他项目应该如何提供他们的X神器的实现? – isco

+0

作为一个普通的依赖关系,在他们自己的'pom.xml'中 – Stewart