Подтвердить что ты не робот

"dependencies.dependency.version" отсутствует ошибка, но версия управляется в родительском

У меня есть проект 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 ...

Я не понимаю, почему он даже не пытается скомпилировать. Ive попытался удалить область выполнения из родительского и дочернего, и это не имеет значения. Пожалуйста, помогите!

4b9b3361

Ответ 1

Несколько вещей, которые, я думаю, вы могли бы попробовать:

  • Поместите буквальное значение версии в дочерний pom

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>3.2.3.RELEASE</version>
      <scope>runtime</scope>
    </dependency>
    
  • Очистите ваш кэш .m2, обычно расположенный в C:\Users\user.m2\repository. Я бы сказал, что делаю это довольно часто, когда я работаю в maven. Особенно перед тем, как совершить, чтобы я мог быть увереннее, что CI будет работать. Вам не нужно каждый раз наносить папку, иногда достаточно пакетов проекта и папки .cache.

  • Добавить тег relativePath в родительскую декларацию pom

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

Похоже, что у вас есть 8 ошибок в ваших помах. Я бы попытался запустить базовую компиляцию перед добавлением родительского помпы и свойств.

Ответ 2

Если кто-то находит свой путь здесь с той же проблемой, с которой я столкнулся, моя проблема заключалась в том, что мне не хватало тегов <dependencyManagement> вокруг зависимостей, которые я скопировал из дочернего pom.

Ответ 3

В теории maven не позволяет использовать свойство для установки родительской версии.

В вашем случае maven может просто не понять, что версия 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>

Ответ 4

Правильно, после большого разрыва волос у меня есть система компиляции.

Очистка кэша .m2 была одной вещью, которая помогла (благодаря Брайану)

Одна из ошибок, которые я сделал, заключалась в том, чтобы поместить 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>

Затем я получил странные "не удалось собрать зависимости для" ошибок в дочернем модуле для всех зависимостей, заявив, что не может найти родителя - даже если он был настроен так же, как и другие модули, которые компилировались.

Я, наконец, решил вещи, компилируя из родительского pom вместо того, чтобы пытаться скомпилировать каждый модуль отдельно. Это сказало мне об ошибке с относительно простым исправлением в другом модуле, который странным образом заставил его скомпилировать.

Другими словами, если вы получаете ошибки maven, относящиеся к дочернему модулю A, это может быть проблемой с несвязанным дочерним модулем Z, поэтому посмотрите там. (и удалите кеш)

Ответ 5

Убедитесь, что значение в дочернем проекте /parent/version node соответствует его родительскому проекту/версии

Ответ 6

Перед созданием дочернего модуля вы должны создать родительский модуль.

Ответ 7

То, что только что сработало, это удалить файл settings.xml в папке .m2: этот файл рассказывал проекту о поиске версии spring mvc и сети, которая не существовала.

Ответ 8

У меня была та же ошибка, я забыл добавить дочерние зависимости в <dependencyManagement>. Например, в родительском пом:

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