Ошибки вложенности пути сборки 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...
:
- Зайдите в навигатор и нажмите правой кнопкой мыши на проекте
- Путь сборки
- Настроить путь сборки
- Источник (вкладка)
![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
Вот простое решение:
- Щелкните правой кнопкой мыши по проекту >> свойства >> путь сборки;
- На вкладке "Источник" выберите все исходные папки;
- Удалить их;
- Щелкните правой кнопкой мыши по проекту, Maven >> Обновить проект.
Ответ 11
![STS IDE]()
Это зависит от того, к какой папке говорят "Использовать как исходную папку". В структуре на картинке, если кто-то говорит это папке "target" или "generate", он получает "вложенную" ошибку. Но в папке "cxf", которая является последней, упомянутой в разделе "plugin" pom.xml и откуда начинается структура пакета (как показано в файле .wsdl), то есть - в нужной папке, чтобы сделать ее "исходной". то и ошибки нет
Ответ 12
Сделайте две папки: final/src/
, чтобы сохранить исходный код Java, и
final/WebRoot/
.
Вы не можете объединить источник и веб-кортеж. Я думаю, вы можете неправильно понять своего учителя.