【问题标题】:'dependencies.dependency.version' is missing error, but version is managed in parent'dependencies.dependency.version' 缺少错误,但版本在父项中管理
【发布时间】:2013-06-23 21:25:39
【问题描述】:

我有一个包含多个模块的 maven 项目。在 Eclipse(Juno,带有 m2e)中,它似乎编译得很好。但是当我在其中一个模块上进行 maven 安装时,构建会立即失败。

父 pom:

  <groupId>com.sw.system4</groupId>
  <artifactId>system4-parent</artifactId>
  <version>${system4.version}</version>
  <packaging>pom</packaging>
  <name>System 4 Parent Project</name>
  <modules>
    <module>system4-data</module>
     ...others...
  </modules>
  <properties>
    <system4.version>0.0.1-SNAPSHOT</system4.version>
    <spring.version>3.2.3.RELEASE</spring.version>
    ... others...
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
        <scope>runtime</scope>
      </dependency>
    ... lots of others ...
    </dependencies>
  </dependencyManagement>

儿童 pom:

  <parent>
    <groupId>com.sw.system4</groupId>
    <artifactId>system4-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>system4-data</artifactId>
  <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <scope>runtime</scope>
    </dependency>
    ... lots of others...
  </dependencies>

当我构建时,我得到以下输出:

[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR]   The project com.sw.system4:system4-data:0.0.1-SNAPSHOT (C:\work\eclips
e_workspaces\systemiv\system4-parent\system4-data\pom.xml) has 8 errors

[ERROR]     'dependencies.dependency.version' for org.springframework:spring-cor
e:jar is missing. @ line 16, column 16

... others omitted for clarity ...

我不明白为什么它甚至不尝试编译。我已经尝试从父子节点中删除运行时范围,这没有任何区别。请帮忙!

【问题讨论】:

标签: java maven-3


【解决方案1】:

我认为您可以尝试几件事:

  1. 将版本的字面值放入 child pom

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>3.2.3.RELEASE</version>
      <scope>runtime</scope>
    </dependency>
    
  2. 清除通常位于 C:\Users\user.m2\repository 的 .m2 缓存。当我在 Maven 中工作时,我会说我经常这样做。尤其是在提交之前,这样我可以更有信心 CI 会运行。您不必每次都对文件夹进行核对,有时只需您的项目包和 .cache 文件夹就足够了。

  3. 在父 pom 声明中添加 relativePath 标签

    <parent>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <version>1</version>
     <relativePath>../parent/pom.xml</relativePath>
    </parent>
    

您的 pom 中似乎总共有 8 个错误。在添加父 pom 和属性之前,我会尝试运行一些基本编译。

【讨论】:

  • 澄清一下——我排除的其他 7 个错误都是同一种类型——即(其他依赖项)缺少 dependencies.dependency.version
  • 对我来说是关键:一个模块不在默认子位置,而是在更深的一个子目录中。谢谢。
  • Maven 抱怨缺少依赖项的另一个原因是父 pom 中声明的依赖项的 与子 pom 正在查找的类型不对应。
  • 谢谢。 2 为我修好了。
【解决方案2】:

如果有人在这里遇到与我相同的问题,我的问题是我从子 pom 复制的依赖项周围缺少 &lt;dependencyManagement&gt; 标签。

【讨论】:

  • 直到现在我一直想知道dependencyManagement标签的用途是什么。这对我有用。我在父pom中缺少这个标签。
  • 这感觉像是适用于大多数来这里的人的答案
  • 你成就了我的一天
【解决方案3】:

好吧,经过一番扯皮后,我有了一个编译系统。

清理 .m2 缓存是一件有帮助的事情(感谢 Brian)

我犯的一个错误是将每个依赖项的 2 个版本放在父 pom 依赖项管理部分中 - 一个带有 &lt;scope&gt;runtime&lt;/scope&gt; 和一个没有 - 这是为了尝试让 eclipse 快乐(即不显示流氓编译错误) 以及能够在命令行上运行。这只是使事情复杂化,所以我删除了运行时的。

显式设置父级的版本似乎也有效(遗憾的是,maven 没有更广泛地支持使用这样的属性!)

  <parent>
    <groupId>com.sw.system4</groupId>
    <artifactId>system4-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

然后我对所有依赖项的子模块中的错误“无法收集依赖项”感到奇怪,说它无法找到父模块 - 即使它的设置与其他编译的模块相同。

我终于通过从父 pom 编译而不是尝试单独编译每个模块来解决问题。这告诉我在另一个模块中进行相对简单的修复时出现错误,然后奇怪的是它全部编译了。

换句话说,如果您遇到与子模块 A 相关的 maven 错误,则实际上可能是与子模块 Z 无关的问题,所以请看那里。 (并删除你的缓存)

【讨论】:

  • 清理整个本地仓库是一个有点过于激进的解决方案......只需删除项目涉及的子树就足够了。关于同一主题的另一篇文章:stackoverflow.com/questions/2389602/…
【解决方案4】:

理论上,maven 不允许使用属性来设置父版本。

在您的情况下,maven 根本无法确定您的父 pom 的 0.0.1-SNAPSHOT 版本是您项目中当前的版本,因此它会尝试在您的本地存储库中找到它。它可能会找到一个,因为它是一个快照,但它是一个旧版本,可能不包含您的依赖管理部分。

有一个解决方法:

只需更改子 pom 中的父部分:

<parent>
    <groupId>com.sw.system4</groupId>
    <artifactId>system4-parent</artifactId>
    <version>${system4.version}</version>
    <relativePath>../pom.xml</relativePath>  <!-- this must match your parent pom location -->
</parent>

【讨论】:

  • 问题是父项目还有其他编译ok的子项目(模块)。 relativePath 默认正确指向父 pom 的位置。
【解决方案5】:

我遇到了同样的错误,我忘记在&lt;dependencyManagement&gt; 中添加子依赖项。例如在父 pom 中:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.sw.system4</groupId>
            <artifactId>system4-data</artifactId><!-- child artifact id -->
            <version>${project.version}</version>
        <dependency>

        <!-- add all third party libraries ... -->

    </dependencies>
<dependencyManagement>

【讨论】:

    【解决方案6】:

    确保子节点的项目/父节点/版本节点中的值与其父节点的项目/版本值匹配

    【讨论】:

      【解决方案7】:

      在做子模块之前必须先构建父模块。

      【讨论】:

        【解决方案8】:

        刚刚起作用的是删除 .m2 文件夹中的 settings.xml:该文件告诉项目寻找不存在的 spring mvc 和 web 版本。

        【讨论】:

          【解决方案9】:

          我遇到了同样的问题,我重命名了“.m2”上的“repository”文件夹(类似于 repositoryBkp,名称并不重要,以防万一出现问题)并创建一个新的“repository”文件夹,然后我重新运行maven,所有项目编译成功

          【讨论】:

            【解决方案10】:

            在我的情况下,我在同一个 pom.xml 中列出了两次相同的依赖项。确保它只使用一次。

            【讨论】:

              【解决方案11】:

              对我来说与分类器有关的问题 在我的dependencyManagement中,我从dependencyManagement中删除了项目的依赖项(以及“版本”关闭诅咒),这解决了问题

              【讨论】:

                猜你喜欢
                • 2019-08-31
                • 1970-01-01
                • 2012-10-05
                • 2019-09-22
                • 1970-01-01
                • 2017-03-01
                • 2019-11-26
                • 2021-07-01
                相关资源
                最近更新 更多