Eclipse Build Path Nesting Error

122

Saya sedang mengerjakan webapp JSP / Servlet / Tomcat sederhana untuk kelas saya. Profesor meminta kami untuk menggunakan struktur folder yang sedikit berbeda dari struktur proyek web dinamis default. Daripada menggunakan folder webcontent, dia menginginkan semua kode sumber kita di bawah src / main / java dan src / main / webapp.

Ketika saya menjalankan aplikasi, file selamat datang saya ditampilkan dengan baik, tetapi ketika saya mencoba mengakses servlet saya, saya mendapatkan:

 Http 500 SEVERE: Allocate exception for servlet InitDb

java.lang.ClassNotFoundException. Saya cukup yakin ini adalah kesalahan jalur build. Saya memiliki final / src di jalur build tetapi saya menerima peringatan

"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the    nesting exclude 'main/' from 'final/src'

masukkan deskripsi gambar di sini

Saya memiliki ini di perakitan penerapan saya:

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

Ketika saya mengecualikan main / peringatan hilang, tetapi itu tidak memperbaiki masalah. Saya sangat menghargai saran apapun. Terima kasih.

Everhill
sumber

Jawaban:

309

Saya memiliki masalah yang sama bahkan ketika saya membuat proyek baru. Saya sedang membuat proyek Java dalam Eclipse, lalu mengubahnya, lalu masuk ke properti java build path, menghapus src/dan menambahkan src/main/javadan src/test/java. Ketika saya menjalankan pembaruan Maven, biasanya memberikan kesalahan jalur bersarang.
Kemudian saya akhirnya menyadari -karena saya belum pernah melihat entri itu sebelumnya- ada <sourceDirectory>src</sourceDirectory>baris di file pom yang tertulis ketika saya mengubahnya. Itu diselesaikan setelah menghapusnya.

acheron55
sumber
1
Ini hanyalah salah satu dari banyak trik acak. Tidak menjelaskan mengapa. Sehingga kurang bermanfaat.
smwikipedia
4
Saya baru saja mengganti nama entri pom menjadi scr / main / java dan semuanya baik-baik saja. Terima kasih atas kirimannya acheron55
Beezer
apakah kamu menaruhnya di sana? atau dari mana asalnya?
Jalur
23

Saya ingin memberikan jawaban non-mavenish untuk utas ini.

Karena kontrol versi dan alasan struktur direktori yang ketat, saya tidak dapat mengikuti jawaban Acheron (jawaban terbaik) untuk melakukan sesuatu yang mirip dengan menghapus src/dan menambah src/main/javadansrc/test/java ke jalur pembuatan.

Saya sebenarnya telah terus-menerus berjuang melawan masalah jalur build bersarang ini selama beberapa minggu. Jawaban untuk masalah tersebut diisyaratkan dalam pesan kesalahan:

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

Memperbaiki

Di jalur build Anda, Anda perlu mengedit Anda Inclusion and Exclusion Patternsdengan mengklik Excluded: (None)lalu Edit...:

  1. Pergi ke navigator dan tekan klik kanan pada proyek
  2. Bangun Jalur
  3. Konfigurasikan Jalur Build
  4. Sumber (tab)

Pola Pengecualian

Di sana Anda dapat menambahkan main/webapp/WEB-INF/classessebagai file Exclusion Pattern. Maka itu akan memungkinkan Anda untuk menambahkan main/webapp/WEB-INF/classeske jalur build sebagai folder sumber terpisah.

heez
sumber
10

Coba ini:

Dari tab perpustakaan:

Eclipse -> right click on project name in sidebar -> configure build path -> Libraries

Hapus perpustakaan aplikasi web Anda:

click on "Web App Libraries" -> click "remove"

Tambahkan mereka kembali:

click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"

Menyoroti "Perpustakaan Aplikasi Web":

Menyoroti "Perpustakaan Aplikasi Web"

Sireesh Yarlagadda
sumber
3

Saya memiliki masalah yang sama dan jawaban yang benar di atas tidak berhasil untuk saya. Apa yang saya lakukan untuk menyelesaikannya adalah pergi ke Build Path->Configure Build Pathdan di bawah tab sumber saya menghapus semua sumber (yang hanya memiliki satu sumber) dan mengonfigurasinya dari sana. Saya akhirnya menghapus proyek dari eclipse dan mengimpor proyek maven lagi untuk menghilangkan kesalahan.

Hatem Jaber
sumber
3

Dalam kasus saya, saya memiliki proyek alam gradle di gerhana , masalahnya ada di a build.gradle, di mana ini sourceSetsditentukan:

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

Hal ini tampaknya bekerja dengan baik dengan IntelliJ , namun tampaknya dari gerhana tidak seperti sarang src, src/java, src/resources. Dalam gerhana saya harus mengubahnya menjadi:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}
albciff.dll
sumber
3

Inilah solusi sederhana:

  1. Klik kanan proyek >> properti >> jalur pembangunan;
  2. Di tab Sumber, Pilih semua folder sumber;
  3. Hapus mereka;
  4. Klik kanan pada proyek, Maven >> Perbarui proyek.
abhijeet104
sumber
2

Anda harus memisahkan sumber dan direktori target tempat keluaran build. Penting juga untuk diperhatikan bahwa tidak ada file kelas yang dapat berakhir di direktori sumber. Ini tidak bertentangan dengan nasihat profesor Anda - sebenarnya dia mempromosikan struktur sumber standar maven untuk ./src/main/java dan ./src/main/webapp. Yang kedua harus menahan mis. file WEB-INF / web.xml wajib tetapi Anda tidak akan pernah menempatkan kelas yang sebenarnya di sana.

Yang perlu Anda ubah adalah direktori target Anda. Saya sarankan menggunakan standar yang sama dan memilih nama "./target" untuk ini. Semua file yang dibangun akan masuk ke sini dan memaketkannya akan menghasilkan artefak yang dapat diterapkan dengan benar. Jika Anda bermigrasi ke menggunakan maven nanti, itu juga akan membantu melakukan ini dengan cara yang skrip dan berulang.

Harapan itu menyelesaikan masalah Anda.

Kristof Jozsa
sumber
1

Solusi yang diterima tidak berfungsi untuk saya, tetapi saya melakukan penggalian pada pengaturan proyek.

Solusi berikut memperbaikinya untuk saya setidaknya JIKA Anda menggunakan Proyek Web Dinamis:

  1. Klik kanan pada proyek lalu properti. (atau alt-enter pada proyek)
  2. Di bawah Deployment Assembly, hapus "src".

Anda harus bisa menambahkan file src / main / java. Ini juga secara otomatis menambahkannya ke Deployment Assembly.

Peringatan: Jika Anda menambahkan catatan src / test / java, itu juga menambahkannya ke Deployment Assembly. Umumnya, Anda tidak membutuhkan ini. Anda dapat menghapusnya.

Chad
sumber
1

Ini mulai membawa saya ke lubang kelinci besar untuk memperbaiki gangguan dengan Eclipse, namun saya baru saja menghapus proyek dari Eclipse dan mengimpornya kembali untuk memperbaikinya.

Carson
sumber
0

Agar compiler Eclipse berfungsi dengan baik, Anda perlu menghapus final / src dari jalur sumber dan menambahkan final / src / main / java sebagai gantinya. Ini juga dapat menyelesaikan masalah Anda karena sekarang direktori build tidak akan berada di dalam folder sumber Java.

Sasha O
sumber
0

STS IDE

Itu tergantung pada folder mana seseorang mengatakan "Gunakan sebagai Folder Sumber". Dalam struktur pada gambar, jika seseorang mengatakannya ke folder "target" atau "generated", dia mendapatkan error "nested". Tetapi pada folder "cxf", yang terakhir, disebutkan di bagian 'plugin' pom.xml dan dari mana struktur paket dimulai (seperti yang ditunjukkan pada file .wsdl), yaitu - folder yang tepat untuk melakukannya 'sumber' satu , maka tidak ada kesalahan

yrz
sumber
0

Punya masalah serupa. Apakah langkah-langkah berikut, masalah diselesaikan:

  1. Hapus proyek di gerhana.
  2. Hapus file .Project dan. Folder pengaturan.
  3. Impor proyek sebagai proyek maven yang ada lagi ke gerhana.
Cara
sumber
-3

Buat dua folder: final/src/untuk menyimpan kode java sumber, dan final/WebRoot/.

Anda tidak dapat menggabungkan sumber dan webroot. Saya pikir Anda mungkin salah paham dengan guru Anda.

Jimmy Zhang
sumber