Динамический веб-проект Maven в eclipse развертывает недопустимые файлы jar для зависимых проектов

У меня есть веб-проект maven, который импортирован в eclipse. У меня есть еще один проект maven (создает файл jar), от которого зависит веб-проект.

Оба этих проекта корректно работают при запуске из командной строки. Пакет mvn создает файл войны, который извлекает банку, от которой он зависит, из репозитория maven для веб-проекта. Пакет mvn создает допустимый файл jar при запуске для библиотеки.

Когда я импортирую библиотеку в Eclipse, m2e распознает, что веб-проект зависит от библиотеки, и обновляет части проекта, чтобы воспользоваться тем фактом, что оба проекта maven размещены в одном рабочем пространстве Eclipse. Раздел «Зависимости Maven» на вкладке «Библиотеки» параметра «Путь сборки Java» для веб-проекта удаляет файл jar библиотеки и заменяет его проектом библиотеки. Поскольку библиотека обновляется в Eclipse, веб-проект распознает эти изменения без необходимости установки/развертывания библиотеки.

Проблема возникает, когда я пытаюсь запустить веб-приложение в Eclipse. Поскольку Eclipse фактически строит веб-проект на основе версии библиотеки в Eclipse, он не развертывает файл библиотеки из репозитория maven, а создает новый файл jar, который является снимком текущей версии библиотеки в Eclipse. Все это в целом работало хорошо для меня, но в проекте, над которым я сейчас работаю, возникла проблема с файлом jar, который создает Eclipse. Вместо того, чтобы вставлять файлы классов для библиотеки, кажется, что он берет каталог «src» моего проекта Maven и заархивирует его как файл jar. Содержимое jar-файла выглядит примерно так:

-main
  -java
    -com
      -... *.java
  -resources
    -...
-test
  -java
    -com
      -... *.java

Где я ожидаю, что это будет выглядеть примерно так:

-com
  -... *.class

Поскольку я успешно использовал этот тип проекта раньше, я пытаюсь выяснить, нужно ли что-то настраивать или я просто столкнулся с ошибкой.

Я использую последнее обновление m2e (1.0.200.20111228-1245) на Eclipse Indigo (идентификатор сборки: 20120216-1857).


person user1270191    schedule 14.03.2012    source источник


Ответы (2)


В Eclipse мы можем отключить "Разрешение рабочей области", чтобы он использовал наши зависимости непосредственно из локального репозитория maven, выполнив следующие действия: -

Отключить разрешение рабочей области

  1. Щелкните правой кнопкой мыши проект внутри затмения
  2. Выберите «Maven» в контекстном меню.
  3. Если он отображает «Отключить разрешение рабочей области», это означает, что он включен. Мы нажимаем его с целью отключить его. Обратите внимание, после этого будет отображаться «Включить разрешение рабочей области», что означает, что мы уже отключили.

Нам может потребоваться обновить конфигурацию проекта и другие связанные зависимости, выполнив следующие действия:

Обновить конфигурацию проекта

  1. Щелкните правой кнопкой мыши проект внутри затмения
  2. Выберите «Maven» в контекстном меню.
  3. Нажмите «Обновить конфигурацию проекта...».
  4. Появится окно «Обновить зависимости Maven».
  5. Выберите необходимые проекты и нажмите «ОК».

Обновить зависимости

  1. Щелкните правой кнопкой мыши проект внутри затмения
  2. Выберите «Maven» в контекстном меню.
  3. Нажмите «* Обновить зависимости».
  4. Появится окно «Обновить зависимости Maven».
  5. Выберите необходимые проекты и нажмите «ОК».

Обратите внимание, поскольку мы больше не используем связанные зависимости непосредственно из рабочей области, они будут использоваться непосредственно из нашего локального репозитория maven. Затем все связанные артефакты должны быть установлены в наш локальный репозиторий maven с помощью следующей командной строки.

мвн установить

В любом случае это можно сделать с помощью контекстного меню внутри Eclipse, выполнив следующие шаги:

  1. Щелкните правой кнопкой мыши проект внутри затмения
  2. Выберите «Запустить от имени» ---> «Установка Maven».
person Charlee Chitsuk    schedule 15.03.2012
comment
Отключение разрешения на рабочем месте каким-то образом решило проблему для меня. - person vsingh; 14.12.2012
comment
Но затем возникает еще одна проблема, связанная со сбоем горячего развертывания. Решение ниже от пользователя 1270191 работает - person vsingh; 04.01.2013

Вот решение, которое я придумал.

Похоже, что в моем случае все еще соблюдаются правила «Сборки развертывания» для библиотечного проекта.

Чтобы изменить его, перейдите в свойства библиотеки -> Сборка развертывания.

В моем случае это просто содержало отображение из '/src' -> '/'. Я удалил эту запись и заменил ее отображением из '/target/classes' -> '/' и '/src/main/resources' -> '/'.

После того, как у меня было это сопоставление, когда файл jar был развернут, он содержал именно то, что я настроил в сборке развертывания. Это позволяет продолжать использовать Eclipse без явной повторной публикации библиотеки для каждого изменения. Но, похоже, для меня не выполняется автоматическое повторное развертывание на tomcat при обновлении библиотеки - мне все еще нужно вручную перезапустить tomcat, чтобы изменения в библиотеке были отражены.

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

person user1270191    schedule 15.03.2012
comment
Блестящий. Это был билет. - person Nicholas DiPiazza; 05.01.2014
comment
Спасибо @user1270191 Вы спасли мой день - person Kuldeep Singh; 23.09.2016