Преобразование существующего проекта Eclipse в проект Maven

246

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

У меня вопрос: есть ли мастер или автоматический импортер для преобразования существующего проекта Eclipse Java в проект Maven с использованием плагина Maven? Или я должен создать новый проект Maven и вручную скопировать все исходные файлы, библиотеки и т. Д.

Том Г
источник
3
Использует ли ваша существующая сборка скрипт Ant?
Мэтт б
4
Вероятно, вам следует сменить принятый ответ
Mr_and_Mrs_D

Ответы:

141

Если вы просто хотите создать POM по умолчанию и включить функции m2eclipse: я полагаю, у вас нет альтернативной автоматической сборки сборки, которую вы пытаетесь импортировать, и я предполагаю, что вы говорите о плагине m2eclipse.

Плагин m2eclipse предоставляет возможность щелкнуть правой кнопкой мыши по проекту, чтобы добавить этот pom.xml по умолчанию:

Более новые версии M2E

Щелкните правой кнопкой мыши Project -> подменю Configure -> Convert to Maven Project

Старые версии M2E

Щелкните правой кнопкой мыши Project -> подменю Maven -> Включить управление зависимостями.

Это сделает необходимое для включения плагина для этого проекта.


Чтобы ответить « есть ли автоматический импортер или мастер? ': не то, что я знаю о. Использование опции выше позволит вам включить плагин m2eclipse для вашего существующего проекта, избегая ручного копирования. Вам все еще нужно будет настроить зависимости и другие вещи, которые вам понадобятся для создания самостоятельно.

brabster
источник
Хотя он включает M2Eclipse, на самом деле он не является мастером, не импортирует существующий проект Eclipse. Скорее, он дает пользователю возможность выбора зависимостей и т. Д., Что может быть сложно, если пользователь не имеет большого опыта работы с Maven.
Калеб Педерсон
Я интерпретировал вопрос как «мне нужно создать новый проект и вручную скопировать материал, чтобы использовать плагин m2eclipse?», Поясню я.
Brabster
16
Пункт меню maven недоступен для меня из контекстного меню (последний m2eclipse), ответ chengdong работает.
wulfgarpro
8
В текущей версии Eclipse (4.2) и m2eclipse пункт меню Конвертировать / Преобразовать в Maven Project.
Джеспер
12
Элемент меню @Jesper «Настроить / преобразовать в Maven Project»
angelcervera
293

Начните с m2e 0.13.0 (если не раньше), вы можете преобразовать проект Java в проект Maven из контекстного меню. Вот как:

  • Щелкните правой кнопкой мыши проект Java, чтобы открыть контекстное меню.
  • Выберите « Настройка»> «Преобразовать в проект Maven».

Вот подробные шаги с снимками экрана.

Чэндун
источник
30
Это по-прежнему не создает структуры каталогов и не добавляет зависимости в pom.
Клаус Нджи
2
m2e все еще не создает структуру каталогов maven и не добавляет зависимости в pom?
Mr_and_Mrs_D
2
Мое решение (@ShriKant Vashishtha), упомянутое ниже, решает все проблемы, описанные здесь. Создает структуру Maven, удаляет пробелы в именах папок, создает pom.xml и перемещает исходные папки в структуре Maven
ShriKant Vashishtha
Работает отлично и безупречно на Windows 10 Eclipse Mars в то время.
Маттис Кохли
Это прекрасно работает для меня
WitnessTruth
12

У меня возникла та же проблема, и я хотел создать Mavenise для всего рабочего пространства Eclipse, содержащего около 60 проектов Eclipse. Выполнение этого вручную требовало много времени, и альтернативные варианты были не столь жизнеспособны. Чтобы решить эту проблему, я наконец создал проект под названием eclipse-to-maven на github. Поскольку eclipse не имеет всей необходимой информации о зависимостях, она делает следующее:

  • Основываясь на <classpathentry/>элементах XML в файле .classpath, он создает зависимости от другого проекта, идентифицирует файл jar библиотеки и на основе его имени (например, jakarta-oro-2.0.8.jar) идентифицирует его версию. В настоящее время artifactIdи groupIdтак же, как я не мог найти то, что могло бы вернуть мне Maven groupId зависимости на основе artifactId. Хотя это не идеальное решение, оно обеспечивает хорошую основу для ускорения Mavenisation.

  • Он перемещает все исходные папки в соответствии с соглашением Maven (как src/main/java)

  • Поскольку проекты Eclipse, имеющие имена с пробелами, трудно обрабатывать в среде Linux / Unix, он также переименовывает их с именами без пробелов.

  • Результирующие файлы pom.xml содержат зависимости и базовую структуру pom. Вы должны добавить необходимые плагины Maven вручную.

ШриКант Вашиштха
источник
Интересный ! Это портировано на Луну? Будет ли проект по-прежнему проектом затмения (действительный .classpathи .projectфайлы)? Не могли бы вы добавить в свой ответ, как использовать ваш плагин для создания простого проекта JavaSE - и каковы будут реальные изменения в структуре каталогов?
Mr_and_Mrs_D
Извините, но я не знаю, что такое Луна. Это больше не будет действительным проектом затмения, так как структура каталога проекта будет изменена. Однако создать измененные конфигурации затмения с помощью Maven легко. Это не плагин, а инструмент. Как его запустить, уже упоминалось в README проекта. Структура каталогов преобразуется в конвенцию Maven. Так что все источники идут, например, в src / main / java.
Шрикант Вашиштха
Луна - последняя версия затмения!
Mr_and_Mrs_D
7

Щелкните правой кнопкой мыши имя проекта> Конфигурировать> Преобразовать в проект Maven> нажмите «Завершить». Здесь вы добавите некоторые зависимости для загрузки и добавьте ожидаемый файл JAR.

Это создаст автоматически сгенерированный файл pom.xml. Откройте этот файл в формате XML в редакторе Eclipse. После build tag ( </build>) добавьте свои зависимости, которые вы можете скопировать с веб-сайта maven, и добавьте их туда. Теперь вы готовы идти. Эти зависимости автоматически добавят необходимые файлы JAR.

Омар Фарок Аник
источник
1
Это создаст структуру папок maven?
Mr_and_Mrs_D
да, он создаст структуру папок maven на основе соответствующего сопоставленного шаблона архетипа и минимальной конфигурации. Вы должны добавить каждую из ваших зависимостей проекта (из .classpath) в POM.xml самостоятельно, по одной за раз.
Пратап Сингх
5

Ответ Chengdong является правильным, вы должны использовать Configure>Convert to Maven Project. Тем не менее, я должен добавить, что процесс конвертации был значительно улучшен, поскольку m2e 0.13.0: m2e 1.1+ и m2e-wtp 0.16.0+ теперь могут преобразовывать существующие настройки eclipse в конфигурацию плагина maven .

Что касается преобразования зависимостей, вы можете попробовать функцию интеграции JBoss Tools (JBT) 4.0 Maven, которая содержит экспериментальный мастер преобразования, подключенный к процессу преобразования m2e: http://docs.jboss.org/tools/whatsnew/maven/ maven-news-4.0.0.Beta1.html .

Это не претендует на то, чтобы быть окончательным решением (ничто не может), но это должно значительно помочь запустить процесс преобразования Maven.

Кроме того, к вашему сведению, вот несколько идей по улучшению процесса преобразования m2e , рефакторинг для использования макета Maven, скорее всего, будет реализован в будущем.

JBT 4.0 (требуется Eclipse JavaEE Juno) можно установить с http://download.jboss.org/jbosstools/updates/stable/juno/ или с Eclipse Marketplace

Фред Брикон
источник
4

Это необходимо, потому что, более или менее, когда мы импортируем проект из git, это не проект maven, поэтому зависимости maven не находятся в пути сборки.

Вот что я сделал, чтобы превратить общий проект в проект maven.

общий проект -> проект Java, щелкните правой кнопкой мыши проект, свойства -> фасеты проекта, нажмите «Java». Этот шаг превратит общий проект в проект Java.

java проект -> проект maven правой кнопкой мыши проект, настройка -> преобразование в проект maven На данный момент maven зависимостей lib все еще не в пути сборки. свойства проекта, путь сборки , добавить библиотеку, добавить зависимости maven lib

И подождите несколько секунд, когда загрузятся зависимости, проект готов!

moonshang
источник
2

Существует программа командной строки для преобразования любого проекта Java в проект SBT / Maven.

Он разрешает все jar-файлы и пытается определить правильную версию на основе контрольной суммы SHA, пути к классу или имени файла. Затем он пытается скомпилировать исходные коды, пока не найдет рабочую конфигурацию. Пользовательские задачи для выполнения в зависимости конфигурации также могут быть предоставлены.

UniversalResolver 1.0
Usage: UniversalResolver [options]

  -s <srcpath1>,<srcpath2>... | --srcPaths <srcpath1>,<srcpath2>...
        required src paths to include
  -j <jar1>,<jar2>... | --jars <jar1>,<jar2>...
        required jars/jar paths to include
  -t /path/To/Dir | --testDirectory /path/To/Dir
        required directory where test configurations will be stored
  -a <task1>,<task2>... | --sbt-tasks <task1>,<task2>...
        SBT Tasks to be executed. i.e. compile
  -d /path/To/dependencyFile.json | --dependencyFile /path/To/dependencyFile.json
        optional file where the dependency buffer will be stored
  -l | --search
        load and search dependencies from remote repositories
  -g | --generateConfigurations
        generate dependency configurations
  -c <value> | --findByNameCount <value>
        number of dependencies to resolve by class name per jar

https://bitbucket.org/mnyx/universalresolver

Alex
источник
Это выглядит как очень привлекательный вариант. Но, поскольку это в настоящее время упаковано, это не очень доступно. Не ясно, как упаковать и развернуть исходный код. Большинство разработчиков Java не являются разработчиками Scala, и SBT не является широко используемым инструментом в сообществе.
А. Рик
1

У меня вопрос: есть ли мастер или автоматический импортер для преобразования существующего проекта Eclipse Java в проект Maven с использованием плагина Maven?

Насколько я знаю, нет ничего, что могло бы автоматически преобразовать проект Eclipse в проект Maven (т.е. изменить макет, создать POM, «сгенерировать» и снабдить его метаданными, обнаружить библиотеки и их версии, чтобы добавить их в POM). , и т.д). В Eclipse просто недостаточно метаданных, чтобы сделать это возможным (в этом и заключается смысл POM) и / или получить достойный результат.

Или я должен создать новый проект Maven и вручную скопировать все исходные файлы, библиотеки и т. Д.

Это был бы лучший вариант на мой взгляд. Создайте проект Maven, копируйте / перемещайте источники, ресурсы, тесты, тестовые ресурсы в соответствующие каталоги, объявляйте зависимости и т. Д.

Паскаль Тивент
источник
Почему этот ответ выше, чем ответ +199? Я почти не видел этого
Evorlor
1

Для преобразования в Gradle является аналогом Maven:

Щелкните правой кнопкой мыши Project -> подменю Configure -> Convert to Gradle (STS) Project

другой
источник
4
Ответ не имеет отношения к вопросу
Рипон Аль-Васим
1
Я нашел этот вопрос, ища Gradle, во многих случаях полезно добавлять ответы для других ОС, а не для заданных ОС, поскольку для отдельного случая не существует вопроса. Что касается Gradle, я бы не стал создавать новый вопрос, чтобы ответить на то, что считаю полезным, скорее я отправлю это. С уважением.
еще