Добавление ссылочных проектов Eclipse в зависимости Maven - PullRequest
24 голосов
/ 26 сентября 2008

Прямо сейчас у меня есть два проекта Eclipse - они оба используют Maven 2 для всей своей добра-зависимости от jar.

Внутри Eclipse у меня есть проект Foo, включенный в путь сборки проекта Bar, так что я могу использовать классы Foo из проекта Bar. Это очень хорошо работает в Eclipse, но когда я пытаюсь:

mvn compile 

внутри директории Bar, происходит сбой, потому что Maven не знает об отношениях между проектами в пути сборки Eclipse.

Если бы я использовал Ant, я бы просто использовал его, чтобы сделать что-то глупое, например скопировать foo.jar в classpath проекта Bar, но, насколько я могу судить, в Maven-land все делается гораздо менее хакерски.

Мне интересно, есть ли стандартный обходной путь для этого типа проблемы - кажется, что это будет довольно распространенным явлением, и я просто упускаю кое-что простое о том, как работает Maven.

Ответы [ 7 ]

19 голосов
/ 26 сентября 2008

Возможно, вы ссылаетесь на другой проект только через Eclipse configure-> build path. Это работает до тех пор, пока вы используете Eclipse для создания своего проекта.

Попробуйте сначала запустить mvn install в проекте Bar (чтобы поместить Bar в репозиторий Maven), а затем добавьте зависимость в pom.xml от Foo.

Это должно сработать!.

9 голосов
/ 26 сентября 2008

Проверьте плагин m2eclipse . Он будет автоматически и динамически обновлять путь сборки проекта при изменении pom. Нет необходимости запускать mvn eclipse:eclipse.

Плагин также обнаружит наличие какой-либо зависимости в той же рабочей области и добавит этот проект в путь сборки.

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

Как было сказано ранее, Maven не будет знать о пути сборки проекта Eclipse. Вам нужно добавить все зависимости в pom, и вам нужно убедиться, что все зависимости сначала собраны и установлены, запустив mvn install.

Если вы хотите построить оба проекта с помощью одной команды, вам может показаться интересным объединение проектов .

2 голосов
/ 18 октября 2017

Мне просто нужно было сделать это, и мне нужно было собрать его с помощью внешней команды mvn clean install. Вот правильный способ настроить это в Eclipse. (С проектом B в качестве зависимости A)

  1. Откройте файл pom.xml для проекта А. в Eclipse.
  2. Перейдите на вкладку Dependencies.
  3. Нажмите кнопку Add... в середине страницы (для левой части поля Зависимости)
  4. Во всплывающем окне должно быть поле под строкой с текстом над ним, говорящим Enter groupId, artifactId or sha1 prefix or pattern (*): Введите идентификатор артефакта для проекта B в это поле.
  5. Дважды щелкните по банке, которую вы хотите добавить в качестве зависимости к этому проекту.
    1. Возможно, вам потребуется обновить проект после.
    2. Щелкните правой кнопкой мыши проект A в вас. Проводник пакетов
    3. Maven -> Обновить проект ...
    4. Затем нажмите OK во всплывающем окне.
2 голосов
/ 26 сентября 2008

Возможно, вы захотите попробовать альтернативный подход, когда у вас есть родительский проект maven и два дочерних проекта. скажем:

Parent (pom.xml содержит ссылки на оба дочерних проекта / модуля) -> A (зависит от B) -> B

затем, когда вы запустите mvn eclipse: eclipse из корня Parent, maven сгенерирует проекты eclipse для A и B, и у него будет B как необходимый проект в пути к классам A.

Вы можете запустить mvn install из корня Parent, чтобы компилировать оба проекта.

Чтобы завершить настройку, вам нужно импортировать A и B в Eclipse, убедившись, что вы не отметили «Копировать проекты в рабочую область».

1 голос
/ 26 сентября 2008

Не полный ответ:
Пом в баре должен включать Foo, чтобы использовать maven для его компиляции.
Мне тоже интересен этот вопрос, но с точки зрения того, как получить затмение для распознавания зависимостей, добавленных maven, на самом деле это еще один проект в той же рабочей области. В настоящее время я изменяю путь сборки после выполнения mvn eclipse:eclipse

1 голос
/ 26 сентября 2008

Я думаю, что лучший способ справиться с этим - сделать проект Bar Maven таким же, как Foo, а затем mvn install сделать его доступным в вашем локальном репозитории Maven. Недостатком является то, что вам нужно устанавливать этот проект каждый раз, когда вы хотите, чтобы Maven увидел изменения, которые вы вносите в Bar.

0 голосов
/ 29 июня 2017

Если вы ссылаетесь на локальный проект, но его версия была обновлена ​​(как правило, увеличена), возможно, его можно найти только в вашем локальном репо, и вам нужно обновить (вероятно, фиксированную) его версию в ваших POM .


У нас есть «общий проект» (используется везде), который не обязательно должен быть версионным, так как мы помечаем его через систему контроля версий. так что либо

  • с фиксированной версией или
  • ссылается на него специальной LATEST версией

хорошие обходные пути, чтобы всегда быть в безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...