Помилки побудови шляху затемнення


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"/> 

Коли я виключаю головне / попередження відходить, але воно не усуває проблему. Буду вдячний за будь-яку пораду. Дякую.

Відповіді:


309

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


1
Це лише один із безлічі випадкових хитрощів. Не пояснюючи чому. Таким чином, менш корисна.
— smwikipedia

4
Я просто перейменував вхід pom на scr / main / java, і все було добре. Дякую за повідомлення acheron55
— Beezer

ти її туди поклав? або звідки воно походить?
— Рядок

23

Мені хотілося накинути незвичну відповідь на цю тему.

Через контроль версій та суворі причини структури каталогів я не зміг дотримуватися відповіді Ахерона (найкращої відповіді) про те, щоб зробити щось подібне до видалення 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. Джерело (вкладка)

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

Там ви можете додати 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та під вкладкою джерела, я видалив усі джерела (у яких було лише одне джерело) та переконфігурував їх звідти. Я врешті-решт видалив проект із затемнення та імпортував проект Maven знову, щоб усунути помилку.


3

У моєму випадку у мене є проект природи граді в затемненні , проблема була в а build.gradle, де це sourceSetsвказано:

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

Це , здається, добре працює з IntelliJ , однак , здається , чим затемнення не любить гніздо src, src/java, src/resources. У затемненні я повинен змінити його на:

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-enter у проект)
  2. У розділі Асамблеї розгортання видаліть "src".

Ви повинні мати можливість додати src / main / java. Він також автоматично додає його до Асамблеї розгортання.

Caveat: Якщо ви додали src / test / java, зверніть увагу, що він також додає його до зборки розгортання. Як правило, цього вам не потрібно. Ви можете його видалити.


1

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


0

Для правильної роботи компілятора Eclipse вам потрібно видалити final / src з вихідного контуру та замість цього додати final / src / main / java. Це також може вирішити вашу проблему, оскільки тепер каталог збірки не буде знаходитись у папці джерела Java.


0

STS IDE

Це залежить від того, до якої папки йдеться "Використовувати як папку джерела". У структурі на малюнку, якщо хтось каже це в папці "target" або "generated", він отримує помилку "вкладеної". Але в папці "cxf", яка є останньою, згадується в розділі "плагін" pom.xml, і звідки починається структура пакету (як показано на .wsdl файл), тобто - правильна папка, щоб зробити це "джерелом" , то помилки немає


0

Маю подібне питання. Наступні кроки було вирішено:

  1. Видаліть проект у затемненні.
  2. Видаліть .Project файл і. Папка налаштувань.
  3. Імпортуйте проект як існуючий проект Maven знову в затемнення.

-3

Створіть дві папки: final/src/для зберігання вихідного Java-коду та final/WebRoot/.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.