'dependencies.dependency.version'缺少错误,但版本在父级中管理

时间:2013-06-26 16:07:38

标签: java maven-3

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

父母:

  <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>

Child 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 ...

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

9 个答案:

答案 0 :(得分:39)

我认为你可以尝试一些事情:

  1. 将版本的字面值放在 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. 将relativePath标记添加到父pom声明

    <parent>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <version>1</version>
     <relativePath>../parent/pom.xml</relativePath>
    </parent>
    
  4. 看起来你的poms总有8个错误。在添加父pom和属性之前,我会尝试运行一些基本的编译。

答案 1 :(得分:29)

如果有人在我这里遇到同样的问题,我的问题是我错过了我从儿童pom复制的依赖关系周围的<dependencyManagement>标签。

答案 2 :(得分:1)

理论上,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>

答案 3 :(得分:1)

对,经过大量的头发撕裂,我有一个编译系统。

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

我犯过的一个错误是将每个依赖项的2个版本放在父pom dependencyManagement部分中 - 一个带有<scope>runtime</scope>而另一个没有 - 这是为了让eclipse高兴(即不显示流氓)编译错误)以及能够在命令行上运行。这只会让事情变得复杂,所以我删除了运行时的。

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

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

然后我变得很奇怪'未能收集所有依赖项的子模块中的'错误的依赖关系,说它无法找到父级 - 即使它的设置与编译的其他模块相同。 / p>

我终于通过从父pom编译而不是尝试单独编译每个模块来解决问题。这告诉我一个错误,在一个不同的模块中有一个相对简单的修复,奇怪的是它使它全部编译。

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

答案 4 :(得分:1)

我有同样的错误,我忘记在<dependencyManagement>中添加子依赖项。例如在父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>

答案 5 :(得分:0)

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

答案 6 :(得分:0)

您必须在执行子模块之前构建父模块。

答案 7 :(得分:0)

正在使用的是删除.m2文件夹中的settings.xml:此文件告诉项目查找spring mvc和web不存在的版本。

答案 8 :(得分:0)

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