MavendependencyMangement不会继承父pom中的依赖项

时间:2019-11-24 01:21:01

标签: maven build

我们所有的外部依赖关系都在企业pom中定义。我们不想在企业pom中定义依赖项的范围,因为我们有同时部署到Tomcat和JBoss的应用程序。众所周知,JBoss中捆绑了一些依赖项,但在Tomcat默认安装中可能不存在。

bom-parent是所有特定于应用程序的企业poms的父级。然后,我们在每个应用程序的bom-app1下面的示例中创建了一个二级企业pom。所有项目都继承了应用程序特定的企业poms。

在GitHub上提供示例项目的详细说明和评论

GitHub:https://github.com/samirshaik/mvn-dep-issue.git

问题: 在特定于应用程序的企业pom中,我们只想在第一级企业pom中定义在dependencyManagement部分中声明的依赖项的范围。但这是不可能的,因为Maven迫使我们声明在特定于应用程序的企业pom中重新声明的依赖项的版本。我们继续使用与在第一级企业pom中声明的版本属性相同的版本属性,并且一切正常,除了我们丢失了父依赖项的所有属性(如排除所有传递性依赖项)。

对我们来说,这是非常真实的要求,但看起来像今天设计时那样的dependencyManagement并没有考虑继承的优点。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.samir.enterprise</groupId>
    <artifactId>bom-parent</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <name>Enterprise BOM</name>

    <properties>
        <log4j.version>1.2.17</log4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

下面是子BOM的示例代码片段,应该让我定义依赖项的范围并继承父对象的所有功能。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.samir.enterprise</groupId>
        <artifactId>bom-parent</artifactId>
        <version>1.0.0</version>
    </parent>

    <groupId>com.samir.enterprise</groupId>
    <artifactId>bom-app1</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <name>Enterprise Child BOM</name>

    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

0 个答案:

没有答案