在Maven中为“提供”范围指定依赖关系的配置文件

时间:2016-03-07 20:46:57

标签: maven

我正在开发一个多模块构建,当我为构建运行集成测试时,需要构建中另一个模块生成的工件之一作为依赖项。我正在使用'提供'范围,因此它不包含在为我们正在构建的模块生成的工件中,但为了确保它已编译,所以我们可以为我们的测试选择它。但是,我们列为依赖项的组件有自己的一组集成测试,它运行。我希望能够在依赖关系的定义中指定Maven在解析依赖关系时应该使用的配置文件(例如,包,而不是验证)。有没有办法在依赖关系的定义中指定我们想要解决依赖关系的Maven阶段/配置文件?

目前的设置:

 <dependency>
        <groupId>groupId</groupId>
        <artifactId>artifactId</artifactId>
        <version>version</version>
        <scope>provided</scope>
 </dependency>

所需的设置:

 <dependency>
        <groupId>groupId</groupId>
        <artifactId>artifactId</artifactId>
        <version>version</version>
        <scope>provided</scope>
        <!-- only go up until package phase for dependency artifact --> 
        <phase>package</phase>
        <!-- use dependency's skip-tests profile to compile it -->
        <profile>skip-tests</profile>
 </dependency>

1 个答案:

答案 0 :(得分:3)

假设B是依赖项,A是要使用完整测试构建的项目,C是A和B的父项。

A取决于B,它在pom中:

<dependency>
        <groupId>BgroupId</groupId>
        <artifactId>BartifactId</artifactId>
        <version>Bversion</version>
        <scope>provided</scope>
 </dependency>

B具有无测试配置文件,默认情况下不活动。它在pom的末尾定义:

<profiles>
    <profile>
      <id>no-test</id>
      <active>false</active>
      <build>
       <plugins>
        <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
           <skipTests>true</skipTests>
         </configuration>
        </plugin>
      </plugins>
     </build>        
    </profile>
</profiles>

然后,您可以使用无测试配置文件构建C.您必须在C项目的根目录下执行以下命令:

mvn clean install -Pno-test

因此,C将首先使用无测试配置文件构建B(因为A需要B)。所以B将使用“跳过测试”属性构建。

然后C将构建A.由于没有在“无测试”配置文件的项目的pom中定义特定行为,因此将使用完整测试构建A。