"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 попытался удалить область выполнения из родительского и дочернего, и это не имеет значения. Пожалуйста, помогите!
Ответы
Ответ 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>