Ошибки вложенности пути сборки Eclipse

Я работаю над простым JSP/Servlet/Tomcat webapp для своего класса. Профессор попросил нас использовать структуру папок, которая немного отличается от структуры динамических веб-проектов по умолчанию. Вместо использования папки webcontent он хочет получить весь наш исходный код под src/main/java и src/main/webapp.

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

 Http 500 SEVERE: Allocate exception for servlet InitDb

java.lang.ClassNotFoundException. Я уверен, что это ошибка пути сборки. У меня есть final/src на пути сборки, но я получаю предупреждение

"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the    nesting exclude 'main/' from 'final/src'

enter image description here

У меня это в моей сборке развертывания:

<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> 

Когда я исключаю main/предупреждение исчезает, но это не устраняет проблему. Буду признателен за любые советы. Благодарю.

Ответ 1

У меня была такая же проблема, даже когда я создал новый проект. Я создавал проект Java в Eclipse, затем изменял его, затем переходил в свойства пути java build, удаляя src/ и добавляя src/main/java и src/test/java. Когда я запускаю обновление Maven, он использовал для получения ошибки вложенного пути.
Затем я, наконец, понял - потому что раньше я не видел эту запись - есть строка <sourceDirectory>src</sourceDirectory> в файле pom, написанная, когда я ее обманываю. Это было разрешено после его удаления.

Ответ 2

Я хотел добавить нематериальный ответ на эту тему.

Из-за контроля версий и строгой структуры каталогов я не смог последовать ответу Ашерона (лучший ответ) сделать что-то похожее на удаление src/ и добавление src/main/java и src/test/java в путь сборки.

На самом деле я несколько недель боролся с этой проблемой вложенного пути сборки. Ответ на проблему указывается в сообщении об ошибке:

To enable the nesting exclude 'main/' from 'final/src'

Фикс

В вашем пути сборки вам нужно отредактировать Inclusion and Exclusion Patterns, нажав Excluded: (None), а затем Edit...:

  1. Зайдите в навигатор и нажмите правой кнопкой мыши на проекте
  2. Путь сборки
  3. Настроить путь сборки
  4. Источник (вкладка)

Exclusion Patterns

Там вы можете добавить main/webapp/WEB-INF/classes как Exclusion Pattern. Затем он должен позволить вам добавить main/webapp/WEB-INF/classes в путь сборки как отдельную исходную папку.

Ответ 3

Попробуйте следующее:

На вкладке библиотек:

Eclipse -> right click on project name in sidebar -> configure build path -> Libraries

Удалите библиотеки веб-приложений:

click on "Web App Libraries" -> click "remove"

Добавьте их обратно:

click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"

Выделение "Библиотеки веб-приложений":

Highlighting "Web App Libraries"

Ответ 4

В моем случае у меня есть проект gradle nature в eclipse, проблема была в build.gradle, где sourceSets этот sourceSets:

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
 }

Кажется, это хорошо работает с intelliJ, но, похоже, eclipse не любит nest src, src/java, src/resources. В затмении я должен изменить его на:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}

Ответ 5

Вы должны разделить свои источники и целевой каталог, где идет вывод сборки. Также важно отметить, что никакие файлы классов никогда не могут оказаться в исходном каталоге. Это не противоречит совету вашего профессора - на самом деле он продвигает стандартную исходную структуру maven, идущую для. /src/main/java и./src/main/webapp. Второй должен содержать, например. обязательный файл WEB-INF/web.xml, но вы никогда не ставите там настоящие классы.

Что вам нужно изменить, это ваш целевой каталог. Я предлагаю пойти с одинаковыми стандартами и выбрать для этого название "./target". Все встроенные файлы войдут сюда и упаковывают, что приведет к правильному развертываемому артефакту. Если вы перейдете на использование maven позже, это также поможет сделать это сценарием, повторяемым способом.

Надеюсь, что это устранит вашу проблему.

Ответ 6

У меня была такая же проблема, и правильный ответ выше не работал у меня. То, что я сделал, чтобы решить это, - перейти на Build Path->Configure Build Path, а на вкладке source я удалил все источники (у которых был только один источник) и перенастроил их там. Я закончил удаление проекта из eclipse и снова импортировал проект maven, чтобы устранить ошибку.

Ответ 7

Принятое решение не сработало для меня, но я сделал некоторые копания в настройках проекта.

Следующее решение исправило это для меня, по крайней мере, если вы используете динамический веб-проект:

  • Щелкните правой кнопкой мыши проект, затем свойства. (или alt-enter в проекте)
  • В разделе "Установка развертывания" удалите "src".

Вы можете добавить src/main/java. Он также автоматически добавляет его в сборку развертывания.

Предостережение. Если вы добавили примечание src/test/java, оно также добавит его в сборку развертывания. Как правило, вам это не нужно. Вы можете удалить его.

Ответ 8

Чтобы компилятор Eclipse работал правильно, вам нужно удалить final/src из исходного пути и вместо этого добавить final/src/main/java. Это также может решить вашу проблему, так как теперь каталог сборки не будет находиться в исходной папке Java.

Ответ 9

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

Ответ 10

Вот простое решение:

  1. Щелкните правой кнопкой мыши по проекту >> свойства >> путь сборки;
  2. На вкладке "Источник" выберите все исходные папки;
  3. Удалить их;
  4. Щелкните правой кнопкой мыши по проекту, Maven >> Обновить проект.

Ответ 11

STS IDE

Это зависит от того, к какой папке говорят "Использовать как исходную папку". В структуре на картинке, если кто-то говорит это папке "target" или "generate", он получает "вложенную" ошибку. Но в папке "cxf", которая является последней, упомянутой в разделе "plugin" pom.xml и откуда начинается структура пакета (как показано в файле .wsdl), то есть - в нужной папке, чтобы сделать ее "исходной". то и ошибки нет

Ответ 12

Сделайте две папки: final/src/, чтобы сохранить исходный код Java, и final/WebRoot/.

Вы не можете объединить источник и веб-кортеж. Я думаю, вы можете неправильно понять своего учителя.