Eclipse Derleme Yolu Yuvalama Hataları


122

Sınıfım için basit bir JSP / Servlet / Tomcat web uygulaması üzerinde çalışıyorum. Profesör, bizden varsayılan dinamik web proje yapısından biraz farklı bir klasör yapısı kullanmamızı istedi. Webcontent klasörünü kullanmak yerine, kaynak kodumuzun tümünü src / main / java ve src / main / webapp altında istiyor.

Uygulamayı çalıştırdığımda karşılama dosyam iyi görünüyor, ancak sunucu uygulamalarıma erişmeye çalıştığımda şunu alıyorum:

 Http 500 SEVERE: Allocate exception for servlet InitDb

Java.Lang.ClassNotFoundException. Bunun bir yapı yolu hatası olduğundan oldukça eminim. Derleme yolunda final / src var ama uyarıyı alıyorum

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

görüntü açıklamasını buraya girin

Dağıtım derlememde bu var:

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

Main'i hariç tuttuğumda / uyarı kayboluyor, ancak sorunu çözmüyor. Herhangi bir tavsiyeye minnettar olurum. Teşekkürler.

Yanıtlar:


309

Yeni bir proje yarattığımda bile aynı sorunu yaşadım. Java projesini Eclipse içinde oluşturuyordum, sonra mavenize ediyordum, sonra java build path özelliklerine giriyor src/ve ekliyor src/main/javave ekliyordum src/test/java. Maven güncellemesini çalıştırdığımda, iç içe geçmiş yol hatası veriyordu.
Sonra nihayet fark ettim - çünkü o girişi daha önce görmemiştim <sourceDirectory>src</sourceDirectory>- pom dosyasında onu mavenize ettiğimde yazılmış bir satır var. Kaldırıldıktan sonra çözüldü.


1
Bu, pek çok rastgele numaradan sadece biridir. Nedenini açıklamıyorum. Böylece daha az yardımcı olur.
smwikipedia

4
Pom girişini scr / main / java olarak yeniden adlandırdım ve her şey iyiydi. Sonrası acheron55 için teşekkürler
Beezer

oraya koydun mu? ya da nereden geliyor?
Satır

23

Bu konuya mavice olmayan bir cevap vermek istedim.

Sürüm kontrolü ve katı dizin yapısı nedenlerinden dolayı, Acheron'un kaldırmaya src/ve eklemeye src/main/javave src/test/javaderleme yoluna benzer bir şey yapma cevabını (en iyi cevap) izleyemedim .

Aslında birkaç haftadır bu iç içe geçmiş yapı yolu sorunuyla sürekli mücadele ediyordum. Sorunun cevabı hata mesajında ​​belirtilmiştir:

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

Fix

Derleme yolunuzda, Inclusion and Exclusion Patternsüzerine tıklayarak Excluded: (None)ve ardından Edit...:

  1. Gezgine gidin ve projeye sağ tıklayın
  2. Yol Oluştur
  3. Derleme Yolunu Yapılandır
  4. Kaynak (sekme)

Hariç Tutma Modelleri

Orada main/webapp/WEB-INF/classesbir Exclusion Pattern. Daha sonra main/webapp/WEB-INF/classes, yapı yoluna ayrı bir kaynak klasör olarak eklemenize izin vermelidir .


10

Bunu dene:

Kitaplıklar sekmesinden:

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

Web uygulaması kitaplıklarınızı kaldırın:

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

Onları tekrar ekleyin:

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

"Web Uygulama Kitaplıkları" nın vurgulanması:

"Web Uygulama Kitaplıkları" nın vurgulanması


3

Aynı sorunu yaşadım ve yukarıdaki doğru cevap benim için işe yaramadı. Bunu çözmek için yaptığım şey Build Path->Configure Build Path, kaynak sekmesine gidip altında, tüm kaynakları (yalnızca bir kaynağı olan) kaldırdım ve oradan yeniden yapılandırdım. Projeyi tutulmadan kaldırdım ve hatayı gidermek için maven projesini tekrar içe aktardım.


3

Benim durumumda, tutulmada aşamalı bir doğa projem var , sorun, bunun belirtildiği build.gradleyerde a idi sourceSets:

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

Bu kuyu ile eserler görünüyor intellij ancak daha görünüyor tutulma değil yuvası gibi yapar src, src/java, src/resources. Gelen Tutulma bunu değiştirmek gerekir:

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

3

İşte basit bir çözüm:

  1. Projeye sağ tıklayın >> özellikler >> inşa yolu;
  2. Kaynak sekmesinde, tüm kaynak klasörleri seçin;
  3. Onları kaldır;
  4. Projeye sağ tıklayın, Maven >> Projeyi güncelleyin.

2

Kaynaklarınızı ve derleme çıktısının gittiği hedef dizini ayırmanız gerekir. Ayrıca hiçbir sınıf dosyasının kaynak dizinde bulunamayacağına dikkat etmek de önemlidir. Bu, profesörünüzün tavsiyesine aykırı değil - aslında ./src/main/java ve ./src/main/webapp için giden maven standart kaynak yapısını destekliyor. İkincisi, örneğin tutmalıdır. zorunlu WEB-INF / web.xml dosyası, ancak oraya asla gerçek sınıflar koymayacaksınız.

Değiştirmeniz gereken şey hedef dizininizdir. Bunun için aynı standartlarda gitmenizi ve "./target" adını seçmenizi öneririm. Tüm yerleşik dosyalar buraya girecek ve bunları paketlemek doğru bir konuşlandırılabilir yapı ile sonuçlanacaktır. Daha sonra maven kullanmaya geçerseniz, bunu komut dosyalı, tekrarlanabilir bir şekilde yapmanıza da yardımcı olacaktır.

Umarım bu sorununuzu çözer.


1

Kabul edilen çözüm benim için işe yaramadı ancak proje ayarlarında biraz araştırma yaptım.

Aşağıdaki çözüm, en azından bir Dinamik Web Projesi kullanıyorsanız, bunu benim için düzeltti:

  1. Projeye ve ardından özelliklere sağ tıklayın. (veya projeye alt-enter)
  2. Dağıtım Derlemesi altında "src" yi kaldırın.

Src / main / java ekleyebilmelisiniz. Ayrıca, bunu otomatik olarak Dağıtım Montajına ekler.

Uyarı: Bir src / test / java eklediyseniz, bunun da onu Dağıtım Montajına eklediğini unutmayın. Genellikle buna ihtiyacınız yoktur. Kaldırabilirsiniz.


1

Bu beni Eclipse ile hataları düzeltmek için büyük bir tavşan deliğinden aşağı indirmeye başladı, ancak projeyi Eclipse'den sildim ve düzeltmek için yeniden içe aktardım.


0

Eclipse derleyicisinin düzgün çalışması için kaynak yolundan final / src'yi kaldırmanız ve bunun yerine final / src / main / java eklemeniz gerekir. Bu aynı zamanda sorununuzu çözebilir, çünkü artık yapı dizini Java kaynak klasörünün içinde olmayacaktır.


0

STS IDE

"Kaynak Klasör Olarak Kullan" ifadesinin hangi klasöre söylendiğine bağlıdır. Resimdeki yapıda biri "hedef" veya "oluşturulmuş" klasörüne söylerse, "iç içe" hatası alır. Ancak, pom.xml'nin 'eklenti' bölümünde belirtilen ve paket yapısının başladığı son olan "cxf" klasöründe (.wsdl dosyasında gösterildiği gibi), yani - bunu yapmak için doğru klasör 'kaynak' bir , o zaman hata yok


0

Benzer bir sorun var. Aşağıdaki adımları uyguladıktan sonra sorun çözüldü:

  1. Tutulmadaki projeyi kaldır.
  2. .Project dosyasını ve. Ayarlar klasörü.
  3. Mevcut maven projesi olarak projeyi tekrar tutulmaya aktarın.

-3

İki klasör oluşturun: final/src/kaynak java kodunu saklamak için ve final/WebRoot/.

Kaynağı ve webroot'u bir araya getiremezsiniz. Öğretmenini yanlış anlayabileceğini düşünüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.