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


122

Я работаю над простым веб-приложением JSP / Servlet / Tomcat для своего класса. Профессор попросил нас использовать структуру папок, которая немного отличается от стандартной динамической структуры веб-проекта. Вместо того, чтобы использовать папку 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'

введите описание изображения здесь

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

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

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

Ответы:


310

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


1
Это лишь одна из множества случайных уловок. Не объясняя почему. Таким образом менее полезно.
smwikipedia

4
Я просто переименовал запись pom в scr / main / java, и все было хорошо. Спасибо за сообщение acheron55
Beezer

ты его туда положил? или откуда оно взялось?
Line

23

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

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

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

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

Fix

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

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

Шаблоны исключения

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


10

Попробуй это:

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

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"

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

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


3

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


3

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

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

Это , кажется, хорошо работает с IntelliJ , однако , кажется , чем затмение не любит гнездо src, src/java, src/resources. В eclipse я должен изменить его на:

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

3

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

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

2

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

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

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


1

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

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

  1. Щелкните правой кнопкой мыши проект, затем свойства. (или Alt-войти в проект)
  2. В разделе Deployment Assembly удалите «src».

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

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


1

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


0

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


0

STS IDE

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


0

Получил аналогичную проблему. Выполнил следующие шаги, проблема решена:

  1. Удалить проект в eclipse.
  2. Удалите файл .Project и. Папка настроек.
  3. Снова импортируйте проект как существующий проект maven в eclipse.

-3

Сделайте две папки: final/src/ для хранения исходного java-кода и final/WebRoot/.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.