是否可以在同一个pom.xml中重新定义导入的Maven依赖项?

时间:2015-11-04 17:22:59

标签: java maven dependency-management

我在应用服务器环境中工作,我使用bom来收集依赖关系信息,如下所示:

        <dependency>
            <groupId>org.jboss.bom.eap</groupId>
            <artifactId>jboss-javaee-6.0-with-security</artifactId>
            <version>${jboss.bom.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

但是,这个特定的bom指定了依赖关系&#34; compile&#34;我希望将我的所有项目作为&#34;提供&#34;。但是,当我尝试覆盖同一个pom中的范围时,我将导入依赖关系,如下所示:

        <dependency>
            <groupId>org.picketlink</groupId>
            <artifactId>picketlink-federation</artifactId>
            <scope>provided</scope>
        </dependency>

Maven抱怨它无法找到该版本,或者如果我使用bom中指定的版本属性,则无法找到该属性。

我相当肯定这是同一个pom中import + override的问题,因为我可以很好地覆盖子项目中的范围。有没有办法在一个pom中导入和覆盖范围?

*上面的所有代码段都来自同一部分。

1 个答案:

答案 0 :(得分:0)

这当然可行:

<dependencyManagement>
   ...
   <dependency>
     <groupId>org.jboss.bom.eap</groupId>
     <artifactId>jboss-javaee-6.0-with-security</artifactId>
     <version>${jboss.bom.version}</version>
     <type>pom</type>
     <scope>import</scope>
   </dependency>
   ...
</dependencyManagement>
<dependencies>
   ...
   <dependency>
     <groupId>org.picketlink</groupId>
     <artifactId>picketlink-federation</artifactId>
     <scope>provided</scope>
   </dependency>
</dependencies>

请记住,您需要在<dependencies>部分的<dependencyManagement>中重新定义范围。

如果使用继承,您的范围覆盖当然会传播到任何子POM。