Eclipse Build Path Nesting Errors


122

ฉันกำลังทำงานกับเว็บแอป JSP / Servlet / Tomcat อย่างง่ายสำหรับชั้นเรียนของฉัน อาจารย์ขอให้เราใช้โครงสร้างโฟลเดอร์ที่แตกต่างจากโครงสร้างโครงการเว็บไดนามิกเริ่มต้นเล็กน้อย แทนที่จะใช้โฟลเดอร์ webcontent เขาต้องการซอร์สโค้ดทั้งหมดของเราภายใต้ src / main / java และ src / main / webapp

เมื่อฉันเรียกใช้แอปไฟล์ต้อนรับของฉันแสดงได้ดี แต่เมื่อฉันพยายามเข้าถึง servlets ของฉันฉันได้รับ:

 Http 500 SEVERE: Allocate exception for servlet InitDb

java.lang.ClassNotFoundException ฉันค่อนข้างมั่นใจว่ามันเป็นข้อผิดพลาดของ build path ฉันมี 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 แล้ว mavenize มันแล้วจะเข้าสู่เส้นทางคุณสมบัติจาวาสร้างการลบsrc/และการเพิ่มและsrc/main/java src/test/javaเมื่อฉันเรียกใช้การอัปเดต Maven มันเคยให้ข้อผิดพลาดพา ธ ที่ซ้อนกัน
แล้วในที่สุดฉันก็รู้ - เพราะฉันไม่เคยเห็นรายการนั้นมาก่อน - มี<sourceDirectory>src</sourceDirectory>บรรทัดในไฟล์ pom ที่เขียนขึ้นเมื่อฉันทำให้เป็นรูปเป็นร่าง ได้รับการแก้ไขหลังจากลบออก


1
นี่เป็นเพียงหนึ่งในเทคนิคการสุ่มเท่านั้น ไม่อธิบายว่าทำไม จึงมีประโยชน์น้อย
smwikipedia

4
ฉันเพิ่งเปลี่ยนชื่อรายการ pom เป็น scr / main / java และทุกอย่างก็ดี ขอบคุณสำหรับโพสต์ acheron55
Beezer

คุณวางไว้ที่นั่นไหม หรือมาจากไหน?
สาย

23

ฉันต้องการที่จะตอบคำถามที่ไม่น่ากลัวสำหรับหัวข้อนี้

เนื่องจากการควบคุมเวอร์ชันและเหตุผลโครงสร้างไดเร็กทอรีที่เข้มงวดฉันไม่สามารถทำตามคำตอบของ Acheron (คำตอบที่ดีที่สุด) ในการทำสิ่งที่คล้ายกับการลบ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. กำหนดค่า Build Path
  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"

ไฮไลต์ "Web App Libraries":

ไฮไลต์ "Web App Libraries"


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ในคราสฉันต้องเปลี่ยนเป็น:

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

วิธีแก้ปัญหาที่ได้รับการยอมรับไม่ได้ผลสำหรับฉัน แต่ฉันได้ทำการขุดค้นเกี่ยวกับการตั้งค่าโครงการ

วิธีแก้ปัญหาต่อไปนี้แก้ไขให้ฉันอย่างน้อยถ้าคุณใช้ Dynamic Web Project:

  1. คลิกขวาที่โปรเจ็กต์จากนั้นคุณสมบัติ (หรือ alt-enter ในโครงการ)
  2. ภายใต้ Deployment Assembly ให้ลบ "src"

คุณควรจะเพิ่ม src / main / java ได้ นอกจากนี้ยังเพิ่มลงใน Deployment Assembly โดยอัตโนมัติ

ข้อแม้: หากคุณเพิ่มโน้ต src / test / java มันจะเพิ่มไปยัง Deployment Assembly ด้วย โดยทั่วไปคุณไม่ต้องการสิ่งนี้ คุณสามารถลบออกได้


1

สิ่งนี้เริ่มพาฉันลงหลุมกระต่ายขนาดใหญ่ในการแก้ไขข้อบกพร่องด้วย Eclipse อย่างไรก็ตามฉันเพิ่งลบโครงการจาก Eclipse และนำเข้าใหม่เพื่อแก้ไข


0

เพื่อให้คอมไพลเลอร์ Eclipse ทำงานได้อย่างถูกต้องคุณต้องลบ Final / src จากพา ธ ต้นทางและเพิ่ม final / src / main / java แทน วิธีนี้อาจช่วยแก้ปัญหาของคุณได้เนื่องจากตอนนี้ไดเร็กทอรี build จะไม่อยู่ในโฟลเดอร์ซอร์สของ Java


0

STS IDE

ขึ้นอยู่กับว่าโฟลเดอร์ใดบอกว่า "Use as Source Folder" ถึง ในโครงสร้างของรูปภาพหากมีคนบอกว่ามันไปที่โฟลเดอร์ "เป้าหมาย" หรือ "สร้าง" เขาจะได้รับข้อผิดพลาด "ซ้อนกัน" แต่อยู่ในโฟลเดอร์ "cxf" ซึ่งเป็นโฟลเดอร์สุดท้ายที่กล่าวถึงในส่วน "ปลั๊กอิน" ของ pom.xml และโครงสร้างแพ็กเกจจะเริ่มต้นที่ใด (ดังที่แสดงในไฟล์. wsdl) นั่นคือ - โฟลเดอร์ที่ถูกต้องในการทำ 'source' จากนั้นจะไม่มีข้อผิดพลาด


0

มีปัญหาที่คล้ายกัน ทำตามขั้นตอนแก้ไขปัญหาแล้ว:

  1. ลบโปรเจ็กต์ใน eclipse
  2. ลบไฟล์. Project และ. โฟลเดอร์การตั้งค่า
  3. อิมพอร์ตโปรเจ็กต์เป็นโปรเจ็กต์ maven ที่มีอยู่อีกครั้งเพื่อคราส

-3

สร้างสองโฟลเดอร์: final/src/เพื่อจัดเก็บซอร์สโค้ด java และ final/WebRoot/.

คุณไม่สามารถรวมแหล่งที่มาและเว็บรูทเข้าด้วยกัน ฉันคิดว่าคุณอาจเข้าใจผิดครูของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.