2011-07-15 151 views
27

從Eclipse運行我的WebApp項目時,它大部分時間運行正常。但如果錯誤地停止服務器,我將它從「服務器」視圖中的「控制檯」視圖中而不是「停止」服務器中殺死。 在運行乾淨的項目,我得到這個無法「在服務器上運行」來自Eclipse的Web應用程序

java.lang.NullPointerException 
at org.eclipse.wst.common.componentcore.internal.util.VirtualReferenceUtilities.getDefaultProjectArchiveName(VirtualReferenceUtilities.java:81) 
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getJavaClasspathReferences(J2EEModuleVirtualComponent.java:332) 
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getNonManifestRefs(J2EEModuleVirtualComponent.java:236) 
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:160) 
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:208) 
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:201) 
at org.eclipse.jst.common.internal.modulecore.SingleRootUtil.hasConsumableReferences(SingleRootUtil.java:217) 
at org.eclipse.jst.common.internal.modulecore.SingleRootUtil.validateSingleRoot(SingleRootUtil.java:165) 
at org.eclipse.jst.common.internal.modulecore.SingleRootUtil.isSingleRoot(SingleRootUtil.java:93) 
at org.eclipse.jst.common.internal.modulecore.SingleRootExportParticipant.canOptimize(SingleRootExportParticipant.java:84) 
at org.eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.canOptimize(FlatVirtualComponent.java:136) 
at org.eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.cacheResources(FlatVirtualComponent.java:118) 
at org.eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.fetchResources(FlatVirtualComponent.java:101) 
at org.eclipse.wst.web.internal.deployables.FlatComponentDeployable.members(FlatComponentDeployable.java:147) 
at org.eclipse.wst.server.core.internal.ModulePublishInfo.hasDelta(ModulePublishInfo.java:418) 
at org.eclipse.wst.server.core.internal.ServerPublishInfo.hasDelta(ServerPublishInfo.java:443) 
at org.eclipse.wst.server.core.internal.Server.hasPublishedResourceDelta(Server.java:1539) 
at org.eclipse.wst.server.core.internal.Server$ResourceChangeJob$1.visit(Server.java:214) 
at org.eclipse.wst.server.core.internal.Server.visitModule(Server.java:2929) 
at org.eclipse.wst.server.core.internal.Server.visit(Server.java:2913) 
at org.eclipse.wst.server.core.internal.Server$ResourceChangeJob.run(Server.java:225) 
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) 

而且同時發動我得到這個

SEVERE: Error starting static Resources 
java.lang.IllegalArgumentException: Document base D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Webapp does not exist or is not a readable directory 
    at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142) 
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4319) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 

請幫從此一蹶不振。

+0

是基於Maven的嗎?當我嘗試構建開源ERP應用程序openbravo而不是基於eclipse的maven時,我面臨同樣的問題。 –

回答

0

我已停止使用此方法來運行我的webapp。 改爲使用mvn tomcat:run。更容易。雖然我不知道如何調試。

0

檢查Tomcat doc的文檔庫某某不存在或不是可讀的目錄:

文件的基礎不存在或不是可讀的目錄由戰爭參數指定的URL 必須標識目錄這 服務器包含一個Web應用程序的「解壓」的版本,或 包含 這個應用程序的Web應用程序歸檔(WAR)文件的絕對URL。修正war參數指定的值。

清潔項目完成後,您可以手動執行「清理...」,然後「發佈」(從服務器視圖中Tomcat的上下文菜單中)?

+0

當我手動「清理...」發生第一個堆棧跟蹤。 Eclipse說「發生問題」和NullPointerException。請幫助 – Ram

+0

另請嘗試查看您是否有權訪問部署Web應用程序的目錄(D:\ workspace \ .metadata \ .plugins \ org.eclipse.wst.server.core \ tmp0 \ wtpwebapps),並且如果從Eclipse清除時,該目錄不會被另一個應用程序訪問。 – padis

+0

它工作得很好。當我開始一個新的工作空間時,問題就消失了。但再次錯誤地通過殺死服務器來停止服務器,這個問題再次出現。 – Ram

0

此問題可能是由當地的項目是不同步的代碼庫造成的。 我會建議刷新/同步你的項目。

1

只要做maven - >更新項目配置和清潔/建立你的月食。項目將被加載。

39

我的日子不好過,使其工作,但由於「亞歷山大Pogrebnyak」(見deploying a war file in WTP(Eclipse) tomcat server)我是能夠使Eclipse Web項目通過M2E與Maven的工作:

在開始之前,我必須說,我是一個非常可疑的人,所以我總是先用「Eclipse> Project> Clean ...」菜單清理所有項目(沒有「立即開始構建」選項)。我也沒有選中「Eclipse> Project> Build Automatically」選項。

順便說一句,我想你將已經安裝在你的M2E的插件,或者是我要的狀態已經沒有意義了......

好了,讓我們開始:

首先,再見服務器配置:

1)如果你在前面的服務器配置中的任何項目,將其刪除(右鍵單擊服務器,選擇「添加和刪​​除「選項)

2)清潔你的服務器的工作目錄(右鍵單擊服務器,選擇‘Tomcat服務器工作目錄’)

3)清潔編撰的」剩的「(右鍵單擊服務器,然後選擇‘清潔’)

4)從刪除服務器配置‘服務器’選項卡

5)徹底刪除您的‘服務器’項目/文件夾(在您的顯示」工程資源管理器」選項卡)

6)獎勵:我也刪除我的服務器運行時環境( 「月食>窗口>首選項>服務器>運行時環境」)

其次, 「Maven的清潔」(如果你的Web項目具有「Maven性質」):

1)右鍵單擊Web項目

2) 「彈出菜單>運行方式>的Maven乾淨」

這應該消滅你的目標文件夾

三,安裝裝配M2E WTP集成(耶!它不會成爲「默認」。一整天弄明白):

1)打開Maven的 「發現」 選項(Eclipse的>窗口>首選項>的Maven>搜索)

2)按 「打開目錄」 按鈕(一個「M2E市場「窗口應該出現)

3)向下滾動,直到找到」WTP集成「選項,然後」檢查「它!

4)按 「完成」

5) 「插件顯示類似於」 將出現。 「下一步」, 「下一步」, 「同意」,等等,等等,等等...

四,離開的Eclipse比再次運行:

1)如果沒有要求RESTAR的Eclipse(我發現很難相信你不會),自己重新啓動它!

第五,行家重返社會:

1)Maven的性質添加到項目中(右鍵點擊你的Web項目 「彈出菜單>配置>轉換爲Maven項目」)

2)更新你的maven配置(是的,是的,可疑的,我知道)。右鍵單擊您的Web項目,現在在其圖標上點擊「M」(「彈出菜單> Maven>更新項目」)

3)運行Maven安裝(右鍵單擊您的Web項目,選擇Run As> Maven的安裝 「)

4)建設項目(」 日蝕>項目>全部構建「)

第六,把它所有的工作:

1)部署和運行Web應用程序(右鍵單擊您的Web項目,「彈出菜單>運行方式>在服務器上運行」)

2)您將被要求創建另一個服務器配置。它會再次創建「服務器」項目/文件夾,但事實就是如此。

就是這樣!我得承認,一旦我運行服務器,它不起作用,但這次(我不知道爲什麼)找不到「Log4J」庫。在一個「項目清理」+「maven clean」和一個「maven install」+「項目構建」之後,會出現另一個消息,指出我的Servlet類無法找到。再一次,我執行了「項目清理」+「maven clean」和「maven install」+「項目構建」和「voila」!它工作(這就是爲什麼我如此可疑)。

我開始擔心起來與這個新的Juno + M2E雙......從未有過這樣的靛藍或木衛三的問題......但我想我可以再次信任的Eclipse(可以嗎?)

+0

這對我很好,我可以在這之後調試服務器。謝謝! –

+1

真棒回答。任何人都知道我可以如何將一些分數轉移給這個人? – jsalvata

+0

非常感謝:) – Manu

7

不要做那些瘋狂的宇宙變通辦法!

這工作得很好:

添加到你的 「的.project」 文件(隱藏)這些行:

<natures> 
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature> 
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> 
    <nature>org.eclipse.jdt.core.javanature</nature> 
    <nature>org.eclipse.m2e.core.maven2Nature</nature> 
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature> 
    <nature>org.eclipse.wst.jsdt.core.jsNature</nature> 
    </natures> 

享受!

爲什麼?如果你檢查那個未存在的目錄,那麼"../.metadata/blah/blah/tmp0/wtpwebapps/YOURPROJECT/"就是EMPTY:那麼你的build就不會創建WAR ... !!! 由於maven插件不理解他必須!

我發現這個從兩個不同的部署/非部署的項目比較兩個文件的.project後...

希望幫助!

+0

* maven plugin * ...這絕對不是第一次與maven相關的事情不正確。 – BenoitParis

3

我刪除了「問題文件夾」 .metadata.plugins \ org.eclipse.wst.server.core \ TMP0 \和現在的工作:)

+1

這確實是一個解決方案! Tomcat不部署webapp,因爲此文件夾中包含以前部署的信息 –

+0

在我的情況下,它是tmp1。我把它弄空了,然後重啓了日食,然後它就起作用了。 – Ramsharan

0

我遇到了同樣的問題,清潔和再創造服務器沒有幫助。但是當我部署另一個項目時,它能夠成功啓動。經過多次比較,我發現.project文件存在差異。因此,我將工作項目的.project文件的內容複製到出現問題的項目文件的內容中,並將其添加回服務器並運行。以下是可用的.project文件的內容。請注意,您需要相應地更改項目名稱:

<?xml version="1.0" encoding="UTF-8"?> 
<projectDescription> 
<name>Project Name</name> 
<comment></comment> 
<projects> 
</projects> 
<buildSpec> 
    <buildCommand> 
     <name>org.eclipse.wst.jsdt.core.javascriptValidator</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
    <buildCommand> 
     <name>org.eclipse.jdt.core.javabuilder</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
    <buildCommand> 
     <name>org.eclipse.wst.common.project.facet.core.builder</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
    <buildCommand> 
     <name>org.eclipse.wst.validation.validationbuilder</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
</buildSpec> 
<natures> 
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature> 
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> 
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature> 
    <nature>org.eclipse.jdt.core.javanature</nature> 
    <nature>org.eclipse.wst.jsdt.core.jsNature</nature> 
</natures> 

0

沒有運氣嘗試一切。我在日食中只有一個項目。關閉eclipse,重命名eclipse目錄,再次解壓縮,在新的eclipse中重新開始。有效。

不,它是沒有效率的。

3

我有相同的問題和詳細的異常,但我解決了這個問題僅僅通過指定POM的封裝類型戰爭像「戰爭」並右鍵單擊該項目,並選擇「的Maven>更新項目配置」,然後重新將該Web模塊部署到Tomcat服務器,就是這樣!

0

步驟,這我也跟着將工作100%:

  1. 清潔您的服務器和服務器通過右鍵單擊服務器上的工作目錄
  2. 從項目資源管理器窗口
  3. 刪除刪除服務器文件夾服務器從運行環境,即從Eclipse - >窗口 - >首選項 - >服務器 - >運行時環境
  4. 關閉eclipse並再次啓動
  5. 在服務器上運行文件agai ñ重新配置Apache服務器
  6. 問題解決
1

我遇到這個問題,但原因是不同的。 問題從wrong server name([Project Name] != [Server Name])開始。 我以爲我可以通過重新創建服務器

這個問題可以通過以下步驟解決:

  1. 刪除服務器:右鍵點擊[Severs]和刪除服務器。
  2. 刪除服務器:右鍵點擊[Project Explorer]和刪除服務器(創建)。
  3. 清理項目:菜單[Project -> Clean]
  4. 創建服務器:右鍵點擊[Severs]和新服務器。
  5. 編輯server.xml中:編輯server.xml福爾您的Web服務器。
  6. 添加服務器:右鍵點擊[Severs]和刪除服務器。
0
Check this version: 

<web-app version="**2.5**" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_**2_5**.xsd" metadata-complete="true"> 

and 

org.eclipse.wst.common.project.facet.core.xml 

<installed facet="jst.web" version="**2.5**"/> 

It can be incompatible with the chosen server. In my case when I tried to upgrade 3.0 tomcat 6.0 stopped working so I had to revert back to 2.5 


so upgrade your server to a highter version or downgrade the web.xml version and run maven --> update project and try again 
0

對我來說,這已經足夠複印件(工作項目):

  1. .settings
  2. 的.classpath
  3. .projects
1

我很對問題感到困惑,因爲在問題發生之前我有另一個jar依賴項。我正在使用已經具有m2e集成功能的Eclipse Luna,並且上述解決方案都不適用於我。

問題增加新的JAR依賴於一個maven戰爭項目時開始,但它仍然運作良好,當一個在POM被註釋掉。 幸運的是,我能夠比較兩個項目,最終該問題與新jar項目中缺失的項目構面相關:效用模塊。該項目

  1. 右鍵:項目Facet
  2. 檢查「應用模塊」並保存
  3. 從Tomcat中刪除應用程序,並重新發布。
相關問題