m2eclipse - дочерние проекты внезапно не видят друг друга

Не очень хорошее название, я попытаюсь объяснить.

Это работало в течение нескольких месяцев, а сегодня по какой-то неизвестной причине eclipse не может разрешить импорт из братьев и сестер (равноправных проектов), когда ничего не изменилось (действительно!). Никаких обновлений eclipse или плагинов eclipse, никаких изменений исходного кода, никаких изменений конфигурации.

У меня довольно стандартная структура проекта:

parent_project
-- clild_project_a
---- pom.xml
-- clild_project_b
---- pom.xml
-- child_project_c
---- pom.xml
-- pom.xml (for parent).

Теперь оба проекта a и b зависят от кода из c.

проект pom.xml.

  <parent>
    <artifactId>parent_project</artifactId>
    <groupId>com.mydomain.ge</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  ...
  <dependencies>  
    <dependency>
        <groupId>com.mydomain.ge</groupId>
        <artifactId>child_project_c</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>

и в родительском pom.xml:

  <modules>
    <module>child_project_a</module>
    <module>child_project_b</module>
    <module>child_project_c</module>
  </modules>

Итак, теперь в Eclipse все операторы импорта говорят, что проект A импортируется из проекта c:

package com.skillkash.ge.api;
import com.skillkash.ge.dao.AlreadyExistsException;

Это дает:

The import com.skillkash.ge.dao.AlreadyExistsException cannot be resolved.

Я попробовал следующее:

  • выполнение очистки maven (используя правый щелчок -> запуск от имени -> maven clen для всех дочерних и родительских.
  • выполнение зависимостей обновления maven для всех проектов
  • выполнение пакета maven для каждого проекта.
  • выполнение m2 maven-> «обновить конфигурации проекта» для всех проектов.
  • перезапуск затмения.
  • перезагрузка компьютера.

Примечание 1. В eclipse у меня есть 4 отдельных проекта, по одному для каждого ребенка и один для родителя. три дочерних проекта также зарегистрированы в SVN, но я не могу легко зарегистрировать родительский проект, так как под ним находятся папки дочерних проектов.
ПРИМЕЧАНИЕ 2, я много знаю о ant, но нуб в maven, но до сих пор не было проблем с этим. например Я понятия не имею, говорит ли maven eclipse использовать источник зависимого проекта, или он должен постоянно компилировать jar в локальный репозиторий m2, и зависимый проект использует это.
ПРИМЕЧАНИЕ 3 , все остальные (внешние) зависимости в порядке.
ПРИМЕЧАНИЕ 4. Я проверил, что установлен флажок "Разрешать зависимости от проектов рабочей области".
ПРИМЕЧАНИЕ 5, в диалоговом окне пути сборки Java Ecipse одноранговые проекты, от которых он зависит, похоже, не находятся на вкладках «источник», «проекты» или «библиотеки». В библиотеках есть поддерево "maven depedencies", но под ним находятся только внешние банки, такие как log4j.


person wingnut    schedule 13.08.2010    source источник
comment
Ive no idea if maven is telling eclipse to use the source of the depentant project, or if it has to compile jar constantly into the local m2 repository, and the dependant project uses that Это то, что делает Разрешить зависимости от проектов рабочей области (при активации зависимости разрешаются с использованием источников из рабочей области).   -  person Pascal Thivent    schedule 13.08.2010
comment
Я предлагаю выполнить шаги, предложенные @whaley, и обновить свой вопрос в соответствии с результатами.   -  person Pascal Thivent    schedule 13.08.2010


Ответы (3)


Это сработает, если вы сделаете mvn clean install в родительском pom из командной строки, а не в eclipse? Это исключит две вещи:

  1. Является ли это проблемой затмения или нет
  2. Связана ли ваша проблема с тем, что вы используете package вместо install

Я заметил, что вы использовали цель пакета maven. В общем, вы всегда должны делать mvm clean install вместо mvn clean package для работы на вашей локальной машине. Если вы не используете цель установки, то проект C никогда не будет установлен в ваш локальный репозиторий (по умолчанию в $HOME/.m2/repository или аналогичный в Windows) и, следовательно, не сможет ссылаться на проекты A. и Б.

В противном случае зайдите в свой репозиторий $HOME/.m2/ и проверьте установленный .jar/.pom для проекта c. Путь к этому каталогу будет соответствовать его координатам maven (например, com/mydomain/ge/child_project_c/0.0.1-SNAPSHOT). Убедитесь, что в банке есть классы, которые вы ожидаете внутри, и убедитесь, что pom, установленный рядом с ней, выглядит так же, как в вашем исходном репозитории.

person whaley    schedule 13.08.2010
comment
Это хороший материал. Я попробовал установить цель maven через eclipse (хотя я ничего не устанавливаю?), Но это не помогло. Затем я попробовал командную строку mvs clean install вне eclipse, как указано, затем я обновил конфигурацию проекта на родительском объекте, и, похоже, на данный момент это исправлено - спасибо! Теперь, когда я смотрю на вкладки исходного кода и библиотеки диалогового окна пути сборки eclipse java, я вижу свой дочерний проект. Вопрос в том, почему eclipse вдруг потерял эти зависимости, и когда я должен делать команды mvn install вручную (надеюсь, не каждый раз, когда я меняю источник!) - person wingnut; 13.08.2010
comment
Диалект Мейвена включает в себя некоторую перегрузку терминов, которая обычно сбивает с толку новичков. Например, установка на самом деле означает вставить результат сборки в мой локальный репозиторий maven. Развернуть действительно означает развернуть это в удаленном репозитории maven. На самом деле они не имеют ничего общего с установкой или развертыванием программного обеспечения. - person whaley; 13.08.2010

Пока не могу прокомментировать, но не должен ли m2eclipse разрешать проекты рабочей области вместо того, чтобы устанавливать их в локальный репозиторий и разрешать их оттуда?

person Rade_303    schedule 14.10.2010

Я узнал, что mvn довольно требователен к тому, что написано внутри build.properties! Я столкнулся с той же проблемой, и мне пришлось позаботиться о том, чтобы

  1. И source.. = src/, и output.. = bin/ введены правильно.
  2. bin.includes = META-INF,/ и . введены правильно.

После того, как я это исправил, mvn clean install заработал как по маслу! @whaley, спасибо за подсказку с $HOME/.m2/repository, я действительно увидел, что файлы действительно отсутствуют в банке по вышеупомянутым причинам!

person col.panic    schedule 01.07.2013