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


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.