2012-05-31 149 views
90

我正在爲我的課程開發一個簡單的JSP/Servlet/Tomcat webapp。教授要求我們使用與默認動態Web項目結構略有不同的文件夾結構。而不是使用webcontent文件夾,他希望我們所有的源代碼都在src/main/java和src/main/webapp下。Eclipse構建路徑嵌套錯誤

當我跑我的歡迎文件顯示正常的應用程序,但是當我試圖訪問我的servlet我得到:

Http 500 SEVERE: Allocate exception for servlet InitDb 

拋出java.lang.ClassNotFoundException。我很確定這是一個構建路徑錯誤。我在構建路徑中最後/ src目錄,但我收到警告

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

enter image description here

我有這個在我展開組件:

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

當我排除主/警告雲離開,但它不能解決問題。我將不勝感激任何建議。謝謝。

回答

242

即使創建了新項目,我也遇到了同樣的問題。 我創建在Eclipse Java項目,然後mavenize,然後進入Java構建路徑屬性移除src/和添加src/main/javasrc/test/java。當我運行Maven更新時,它用來給出嵌套的路徑錯誤。
然後我終於意識到 - 因爲我之前沒有看到那條記錄 - 當我將它寫入文件時,寫入了一個pom文件中的<sourceDirectory>src</sourceDirectory>行。它在刪除後得到解決。

+0

這只是許多隨機的招數之一。不解釋原因。因此不太有用。 – smwikipedia

+1

我剛剛將pom條目重命名爲scr/main/java,並且都很好。謝謝你的帖子acheron55 – Beezer

+1

偉大的,這是工作.. – deen

-3

製作兩個文件夾:final/src/來存儲源代碼java和 final/WebRoot/

您不能將源代碼和webroot放在一起。我想你可能會誤解你的老師。

2

您必須將構建輸出所在的源和目標目錄分開。同樣重要的是要注意,沒有任何類文件可以在源目錄中結束。這並不違揹你的教授的建議 - 實際上他正在推廣用於./src/main/java和./src/main/webapp的maven標準源代碼結構。第二個應該舉例如。強制性的WEB-INF/web.xml文件,但是你永遠不會把實際的類放在那裏。

你需要改變的是你的目標目錄。我建議按照相同的標準選擇名稱「./target」。所有構建的文件將進入此處,打包完成後將產生正確的可部署工件。如果您稍後再遷移到使用maven,它也將以腳本化,可重複的方式幫助您做到這一點。

希望能夠解決您的問題。

0

對於Eclipse編譯器才能正常工作,你需要從源路徑中刪除最後/ src目錄,並添加最終/ src目錄/主/ Java的替代。這也可以解決你的問題,因爲現在構建目錄不在Java源文件夾內。

9

試試這個:

從圖書館標籤:

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

刪除您的Web應用程序庫:

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" 

突出「網絡A PP庫「:

Highlighting "Web App Libraries"

12

我想在一個非mavenish回答這個線程拋出。

由於版本控制和嚴格的目錄結構的原因,我無法跟隨做類似的去除src/並添加src/main/javasrc/test/java到構建路徑的東西黃泉的回答(最好的答案)。

我實際上已經離開了這個嵌套的構建路徑問題幾個星期。在這個問題的答案是暗示在錯誤消息:

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

在您的構建路徑,需要通過點擊Excluded: (None)編輯您的Inclusion and Exclusion Patterns然後Edit...

Exclusion Patterns

有您可以添加main/webapp/WEB-INF/classes作爲Exclusion Pattern。然後它應該允許您將main/webapp/WEB-INF/classes作爲單獨的源文件夾添加到構建路徑。

2

我有同樣的問題,上面的正確答案不適合我。我做了什麼來解決它是去Build Path->Configure Build Path和源選項卡下,我刪除了所有來源(它只有一個來源),並從那裏重新配置它們。我最終從eclipse中移除了項目並再次導入maven項目以清除錯誤。

0

接受的解決方案並不適用於我,但我做了一些挖掘項目設置。

以下解決方案固定它至少對我來說,如果你是使用動態Web項目:

  1. 右鍵單擊該項目,然後屬性。 (或者在項目中輸入alt)
  2. 在部署程序集中刪除「src」。

您應該可以添加src/main/java。它也自動將其添加到部署程序集。

警告:如果您添加了src/test/java註釋,它還會將其添加到部署程序集。一般來說,你不需要這個。你可以刪除它。

0

在我來說,我有一個gradle這個性質項目日食,問題是在一個build.gradle,在此sourceSets指定:

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

這似乎與的IntelliJ效果很好,但是似乎比eclipse不喜歡巢src,src/java,src/resources。在日食我必須將其更改爲:

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