【问题标题】:Subproject does not fetch dependencies from Super POM子项目不从 Super POM 获取依赖项
【发布时间】:2020-04-26 22:05:16
【问题描述】:

我遇到了以下情况: diag-parent(超级 POM)和diag-domain(子)

超级POM:

<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>de.dbsystel.udg</groupId>
        <artifactId>udg-super-pom</artifactId>
        <version>2.0.3</version>
        <relativePath/>
    </parent>

    <groupId>de.db.udg.diagnose.udg-diagnose</groupId>
    <artifactId>diag-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.20.16-SNAPSHOT</version>
    <name>${project.artifactId}</name>

    <modules>
        <module>diag-domain</module>
    </modules>

    <dependencyManagement>
        <dependencies>

            <dependency>
                <groupId>de.db.kolt.alice</groupId>
                <artifactId>alice</artifactId>
                <version>2.2.1</version>
                <scope>compile</scope>
            </dependency>

            <dependency>
                <groupId>org.primefaces</groupId>
                <artifactId>primefaces</artifactId>
                <version>7.0</version>
            </dependency>

            <!-- PrimeFaces File Upload utils -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.2.1</version>
            </dependency>

            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.6</version>
            </dependency>
...
</dependencies>
    </dependencyManagement>

子 POM:

    <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>de.db.udg.diagnose.udg-diagnose</groupId>
    <artifactId>diag-parent</artifactId>
    <version>1.20.16-SNAPSHOT</version>
  </parent>

  <artifactId>diag-domain</artifactId>
  <packaging>jar</packaging>
  <name>${project.artifactId}</name>
...
</project>

编译 diag-domain 模块结果:

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project diag-domain: Compilation failure: Compilation failure:
[ERROR] /D:/Projekte/FA-DIAGNOSE/UDG-DIAGNOSE/branches/Richface_Migration/impl/diag-domain/src/main/java/de/db/udg/diagnose/udgdiag/domain/base/ToManyAssociationModel.java:[13,28] package org.primefaces.model does not exist

它显然不会从 diag-parent 获取 任何 依赖项。甚至我的 .m2 存储库也是空的。

diag-domain的有效pom:

<!-- ====================================================================== -->
<!--                                                                        -->
<!-- Generated on 2020-01-09T11:13:57                                       -->
<!--                                                                        -->
<!-- ====================================================================== -->

<!-- ====================================================================== -->
<!--                                                                        -->
<!-- Effective POM for project                                              -->
<!-- 'de.db.udg.diagnose.udg-diagnose:diag-domain:jar:1.20.16-SNAPSHOT'     -->
<!--                                                                        -->
<!-- ====================================================================== -->

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>de.db.udg.diagnose.udg-diagnose</groupId>
    <artifactId>diag-parent</artifactId>
    <version>1.20.16-SNAPSHOT</version>
  </parent>

  <groupId>de.db.udg.diagnose.udg-diagnose</groupId>
  <artifactId>diag-domain</artifactId>
  <version>1.20.16-SNAPSHOT</version>
  <name>diag-domain</name>
  <description>domain objects</description>

  <dependencyManagement>
    <dependencies>
      ...
      <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>7.0</version>
        <scope>compile</scope>
      </dependency>
      ...
</dependencyManagement>
    </dependencies>
</project>

【问题讨论】:

    标签: maven pom.xml parent-pom


    【解决方案1】:

    &lt;dependencyManagement&gt; 中的条目不是依赖项。它们只是依赖项的标准版本。

    依赖项需要在&lt;dependencyManagement&gt;&lt;dependencies&gt;标签外部中。

    【讨论】:

    • 是的,我会在&lt;dependencyManagement&gt;中添加指定依赖版本,并在&lt;dependency&gt;中包含groupId/artifactId(无版本)
    【解决方案2】:

    由于您只使用了dependencyManagement,因此不会导入依赖项。 您需要子 pom 中的 &lt;dependencies&gt; 部分,然后在其中输入依赖项。

    &lt;depenencyManagement&gt; 仅用于标记所有子模块使用的依赖项的某些版本。

    见:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management

    当您有一组从公共父级继承的项目时,可以将有关依赖项的所有信息放在公共 POM 中,并更简单地引用子 POM 中的工件

    【讨论】:

    • 如何全局声明依赖关系,因为多个项目使用 primefaces jar。
    • &lt;dependencies&gt; 部分放入您的父 POM(在 &lt;dependencyManagement&gt; 部分之外)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多