Включение Jar проекта Maven в другой проект Maven не работает, но включение проекта в другой проект Maven работает.

У меня есть 2 проекта, а именно Project_1 и Project_2. Оба проекта Maven, и я использую Netbeans.

Я хочу включить банку Project_1 в Project_2, что я делаю как это.

Проблема в том, что когда я включаю банку, я не получаю никаких ошибок времени компиляции, однако я получаю исключение NoClassDefFoundError во время выполнения.

Когда я включаю Project_1 в Project_2, выполняя указанные шаги здесь. (Пример открытого проекта). Я не получаю никаких ошибок. Ни время выполнения, ни время компиляции.

Не могли бы вы объяснить мне, что мне здесь не хватает?

Обновить

Project_2 развернут на сервере, который не находится на моем локальном компьютере, однако Project_1 находится на моем локальном компьютере.

Включение Project_1 в Project_2 в качестве проекта было сделано для тестирования на моей локальной машине.


person JHS    schedule 05.06.2012    source источник
comment
После выполнения второго варианта он также добавит запись в pom.xml. Пожалуйста, посмотрите, что он добавил в тег ‹dependency›   -  person rizzz86    schedule 06.06.2012
comment
@rizzz86 rizzz86 область действия и systemPath отсутствуют, если я включаю проект.   -  person JHS    schedule 06.06.2012
comment
Значит, если вы добавите тег ‹dependency› вручную без области действия и systemPath, то он также будет работать?   -  person rizzz86    schedule 06.06.2012
comment
См. stackoverflow.com/questions/9201195/   -  person Mark O'Connor    schedule 06.06.2012


Ответы (1)


Во-первых, хорошее эмпирическое правило: никогда не используйте системную область действия и системный путь для подтягивания зависимостей. По моему опыту всегда есть лучший способ :-)

Если Project_2 зависит от Project_1, то сначала установите его jar в локальный репозиторий:

   cd Project_1
   mvn clean install

Посмотрите вывод, и вы обнаружите, что jar находится где-то в следующем каталоге:

   $HOME/.m2/repository

Как только это будет сделано, jar будет доступен как обычная зависимость для второй сборки.

  cd Project_2
  mvn clean compile

Локальный репозиторий обеспечивает отделение проектов друг от друга. Предполагая, что вы используете моментальные версии Project_1, сборка Project_2 всегда будет извлекать последнюю построенную и протестированную версию.

Обновлять

Вы должны использовать менеджер репозитория Maven, чтобы обмениваться файлами jar между машинами/командами. Рекомендации содержатся в следующем ответе:

Поделиться jar модуля с другой командой

Как настроить Maven для использования репозитория, такого как Nexus, описано в его документация.

Как описано в документации по развертыванию подключаемого модуля, вам необходимо добавьте раздел distributionManagement в свой POM (с подробным URL-адресом репозитория), а затем загрузите jar проекта в свой репозиторий следующим образом:

   cd Project_1
   mvn clean deploy
person Mark O'Connor    schedule 05.06.2012
comment
Спасибо, но есть проблема. Project_1 — это проект на моем локальном компьютере, а Project_2 — это проект, развернутый на сервере. Чтобы включить банку Project_1 в Project_2, я должен разместить банку Project_1 где-то на сервере и включить ее в Project_2. - person JHS; 06.06.2012
comment
@Juniad Затем вам нужно установить менеджер репозитория Maven и использовать его для развертывания выходных данных сборки и извлечения зависимостей. Настоятельно рекомендуется, когда вы делитесь jar-файлами, а также улучшите производительность ваших сборок. См. stackoverflow.com/questions/9201195/ - person Mark O'Connor; 06.06.2012