it-swarm.com.ru

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

Я работаю над простым веб-приложением 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'

enter image description here

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

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

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

104
CodeNameBrandon

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

276
acheron55

Я хотел добавить не-mavenish ответ на эту тему.

Из-за контроля версий и строгой структуры каталогов я не смог последовать ответу Ашерона (лучший ответ) сделать что-то похожее на удаление 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 в путь сборки как отдельную исходную папку.

17
heez

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

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

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"

10
Sireesh Yarlagadda

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

2
Hatem Jaber

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

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

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

2
Kristof Jozsa

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

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

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

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

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

1
Chad

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

sourceSets {
    main {
        Java {
            srcDir 'src'
        }
    }
 }

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

sourceSets {
    main {
        Java {
            srcDir 'src/main/Java'
        }
    }
}
1
albciff

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

0
Sasha O

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

0
Carson

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

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