是否可以在同一个 pom.xml 中重新调整导入的 Maven 依赖项的范围?

jos*_*ain 6 java dependency-management maven

我正在应用程序服务器环境中工作,在该环境中我使用 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>
Run Code Online (Sandbox Code Playgroud)

但是,这个特定的 bom 将依赖项指定为“编译”,我希望将其范围限定为“提供”的所有项目。但是,当我尝试覆盖导入依赖项的同一个 pom 中的范围时,如下所示:

        <dependency>
            <groupId>org.picketlink</groupId>
            <artifactId>picketlink-federation</artifactId>
            <scope>provided</scope>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dan*_*iel 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>
Run Code Online (Sandbox Code Playgroud)

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

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