Eclipse + Maven + Git + многомодульные проекты = несчастье

У нас есть многомодульный проект с использованием Eclipse и Maven. Единственный способ, которым я мог заставить его работать в прошлом, заключался в использовании плоского макета для проектов, где родительский модуль был равен другим модулям. Это отлично работало с m2eclipse и Subversion.

Теперь мы хотели бы перейти к Git и GitHub. Я хотел бы представить весь проект вместе со всеми модулями как единый проект на GitHub. Проблема в том, что EGit, подключаемый модуль Eclipse/Git, хочет управлять проектами по одному, а не группами проектов, и поэтому, если у вас плоский макет, вы не можете этого сделать.

Правильный ответ — использовать стандартный иерархический макет Maven и управлять родителем и всеми модулями как единым целым. Но Eclipse это не нравится, и никакие возни не заставят Eclipse принять вложенные проекты. m2Eclipse не поддерживает иерархии: https://issues.sonatype.org/browse/MNGECLIPSE-2291

Ну так что ты делаешь? Сделать Git из командной строки и отказаться от возможности посмотреть, какие файлы изменились в Eclipse? Или отказаться от Eclipse?


person ccleve    schedule 20.10.2011    source источник


Ответы (4)


Стандартная многомодульная структура Maven в виде единого репозитория git отлично работает для меня в Eclipse Indigo с M2e и подключаемым модулем git, который появляется в этой среде. Вы не можете попросить Eclipse сделать вашу выборку за вас, но как только вы вытащите из командной строки, вы используете Team/Share, скажите «Git!» и все хорошо.

Кажется, я понимаю источник: иерархия — это проблема для проектов внутри рабочей области, а не для «существующих проектов», которые вы импортируете.

Вот типичный рабочий процесс:

  1. используйте git svn clone, чтобы получить дерево. это стандартное, иерархическое многомодульное дерево mvn
  2. в eclipse используйте проект import/maven/existing maven. Укажите на все дерево
  3. выбрать все
  4. OK

это работает нормально. Вложенность ничуть не мешает затмению. Я не знаю, на какую проблему указывает этот bz.

Прежде чем я использовал m2e, я использовал плагин maven-eclipse. И это также сработало в этих случаях, потому что он не генерирует .project/.classpath для <packaging>pom</packaging> агрегирующих проектов, поэтому Eclipse никогда не вызывается для фактического вложения чего-либо.

Я не одинок — см. инструкции по установке для разработчиков по адресу cxf.apache.org для примера с открытым исходным кодом, который вы можете попробовать сами.

person bmargulies    schedule 20.10.2011
comment
Ваша структура иерархическая или плоская? - person ccleve; 21.10.2011
comment
Как вы заставили Eclipse работать с иерархической компоновкой? Я не могу скомпилировать. Согласно bugs.eclipse.org/bugs/show_bug.cgi?id=245412 Eclipse их пока не поддерживает. - person ccleve; 21.10.2011
comment
У M2E нет проблем с этим. - person bmargulies; 21.10.2011

Возможно ли, что вы работаете со старыми версиями инструмента?

У меня есть многомодульный проект Maven, с которым я работаю, используя Eclipse 3.7 (Indigo), M2Eclipse (1.0) и EGit (1.0).

В файловой системе многомодульный проект имеет один родительский каталог.

В Eclipse у меня есть отдельные проекты для каждого модуля.

M2Eclipse отлично справляется с управлением зависимостями.

Существует единственный репозиторий git (каталог .git) на верхнем уровне, и EGit работает отлично.

person Sri Sankaran    schedule 21.10.2011
comment
+1, потому что я использовал старые версии, и все изменилось, когда я обновился. - person ccleve; 24.10.2011
comment
В Eclipse у меня есть отдельные проекты для каждого модуля. Для тех, кому интересно, файловая система является рабочей иерархией, но m2eclipse по-прежнему не позволит вам управлять родительским/дочерним модулем как единой иерархией проекта. Каждый модуль для m2eclipse должен иметь проект в Eclipse, иначе Eclipse не найдет типы классов или отношения между ними. - person ; 10.02.2012

Вы можете разместить свои модули в Git с иерархической структурой. И создайте эти модули с помощью Maven. Если эти модули являются проектами (независимо от проекта java, c++ или php), распознанными Eclipse, их можно импортировать в рабочую область в виде плоского макета в рабочей области.

-- the root of Git working directory
  -- moudule1
    -- project1(a java project)
      -- .project(a project file recognized by eclipse JDT)
      -- pom.xml
    -- project2(a java project)
      -- .project
      -- pom.xml
  -- module2
    -- projectA(a java project)
      -- .project(a project file recognized by eclipse JDT)
      -- pom.xml
    -- projectB(a c++ project)
      -- .project(a project file recognized by CDT)
      -- pom.xml 
person Kane    schedule 21.10.2011
comment
Как? Если они физически расположены на диске в иерархическом порядке, как их импортировать в плоском виде? - person ccleve; 21.10.2011
comment
Рабочему пространству все равно, где находится проект (может быть под рабочим пространством или в любом месте на диске). Каждый проект имеет только файл .project в корневой папке, Eclipse может импортировать его в рабочую область, не копируя его в рабочую область. Смотрите мой обновленный ответ. - person Kane; 24.10.2011

Для проектов Maven одновременный импорт нескольких файлов можно выполнить с помощью мастера импорта Maven (доступного из Git). Если вы не знаете, какие проекты вы собираетесь импортировать, вы можете использовать новый Easymport, который будет импортировать проект «как лучше», выводя конфигурации из различных файлов. См. https://github.com/jbosstools/jbosstools-playground#easymport-easy-and-smart-openimport-of-a-project

Как только вы получите все эти проекты, вы можете использовать плагин Nestor, который покажет проект во вложенном/иерархическом макете, более правильно отображая ваш проект Maven: https://github.com/jbosstools/jbosstools-playground#nestor-view-nested-projects

person Mickael    schedule 27.11.2014