2012-12-11 52 views
4

我有pom声明的依赖关系A,B和C.是否有可能创建一个配置文件,删除依赖关系,以便当我编译与该配置文件时,我结束了例如与编译依赖项A和B (没有C)?Maven配置文件删除依赖

+0

你的问题是关于'''部分,对吧? –

+0

Andrew Logvinov - Righ,依赖项A,B,C在部分中声明,我想使用配置文件删除依赖项C.那可能吗? – Kamil

回答

12

我不知道一种方法来排除配置文件中的顶级依赖关系(<exlusions>仅适用于传递依赖关系)。但是你可以在一个单独的个人资料,例如指定一个默认的配置文件的“正常”的依赖和减少你的依赖关系:

<profiles> 

    <profile> 
     <id>default</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <dependencies> 
      <dependency> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
       <version>1.2.14</version> 
      </dependency> 
     </dependencies> 
    </profile> 

    <profile> 
     <id>excludeDependency</id> 
     <dependencies> 
     </dependencies> 
    </profile> 

</profiles> 

与“excludeDependency”的个人资料编译,如果你使用log4j的地方会失败。

您的用例不清楚。也许像optional dependenciesprovided dependencies等其他解决方案也可以满足您的需求。看看这些可能性。

+0

这是最好的解决方案,我想。 –

+0

谢谢,这回答我的问题 – Kamil

1

在Maven的配置文件是添加剂在基础型材所以我发现使用好这种模式排除依赖:

<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.14</version> 
    </dependency> 
</dependencies> 

<profiles> 
    <profile> 
     <id>Exclude</id> 
     <dependencies> 
      <dependency> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
       <version>1.2.14</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
</profiles> 

然后您可以通过更改范围测试“排除”的依赖。不适合所有用途,但只是另一种选择。