2012-03-02 160 views
20

我正在嘗試使用Eclipse Indigo和Tomcat服務器設置一個基本的hello世界項目。我用一個簡單的servlet創建了一個動態項目。測試了這個servlet並且工作得很好。然後我啓用了Maven支持並將logback添加到我的pom中。我在servlet的doGet方法中寫入了一條日誌語句。當運行servlet時,它會抱怨它找不到任何綁定,因爲logback jar沒有被複制到Eclipse tomcat實例中。我希望能夠找到在這裏的某個地方發表的罐子:Eclipse WTP未發佈Maven依賴關係

${workspace}\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\

如何獲得的Eclipse與WTP/Maven的正常工作?我也嘗試安裝沒有區別的m2e-wtp連接器。

回答

48

檢查部署大會(背景上項目菜單),必須有映射Maven依賴 - > WEB-INF/lib目錄

+0

謝謝你的提示,這是正確配置,但不工作。最終我發現從頭開始創建一個新項目的工作。在這種情況下,我創建了該項目,然後添加了Maven WTP連接器,但未正確配置該項目。 – dcompiled 2012-03-03 21:52:35

+2

我有一點點不同的問題,但是這固定了它。我正在使用Maven構建其中包含SNAPSHOTS的項目。我最初啓用了Workspace Resolution,並將其關閉。 Eclipse被配置爲仍然使用本地項目,而不是來自我們的nexus回購的快照。我不斷收到中國國家農業科學院,發現這表明它仍然試圖解決它而不是發佈它的問題。 – bh5k 2012-10-03 16:46:55

+0

這幫了我很多忙,在另一種情況下:)(類似) – Alex 2013-03-30 19:42:58

13

從ASP.NET背景來看,我發現使用Eclipse WTP和Maven運行webapp需要花費多少工作,尤其是在您自己學習的情況下。希望這本快速入門指南能幫助別人快速起步。

有兩種方法可以使用Maven在Eclipse WTP中使用Hello World項目。您可以創建一個動態Web項目,然後添加Maven自然,或者您可以做相反的事情。

先決條件爲Eclipse與更新站點

啓動配置

選項1:創建動態Web項目再加入Maven的自然

  • 創建新的Maven項目,選擇原型 org.apache.maven.archetypes :maven-archetype-webapp

  • 更改爲Java EE透視圖。

  • 創建一個新的源文件夾,src \ main \ java。注意Eclipse如何不夠智能爲您做這件事,並且文件夾的排序也不正確。 src \ main \ java文件夾在src \ main \ resources之後列出。這可以稍後在項目屬性中手動修復。

  • 創建一個新的servlet。注意Eclipse如何將這個文件默認爲錯誤的文件夾src \ main \ resources,因爲順序是錯誤的。相反,請手動選擇src \ main \ java。 將嚮導的第二頁上的URL映射更改爲/ *以使測試更容易。

  • 現在我們的servlet已經準備就緒,但servlet api的依賴關係沒有綁定。 A)我們可以將servlet api作爲依賴添加到我們的項目中,或者B)我們可以綁定到Apache 7.0的Eclipse服務器配置。

  • 對於選項A,添加這種依賴到POM:

<dependency> 
    <groupId>org.apache.tomcat</groupId> 
    <artifactId>tomcat-api</artifactId> 
    <version>7.0.${set this}</version> 
    <scope>provided</scope> 
</dependency> 
  • 對於選項B:

    • 項目屬性 - > Java構建路徑 - >庫 - >添加庫 - >服務器運行時 - >的Apache Tomcat 7.0
    • 右鍵點擊並運行在服務器上:
  • 空白頁應該出現在內部瀏覽器中,如http://localhost:8080/ $ {a rtifact}依賴

測試發佈

  • 添加喬達時間到POM。

  • 在早期的doGet方法創建的servlet添加此行並導入必要的依賴:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.getWriter().println("The time is now: " + new DateTime().toString()); 
} 

重新加載測試頁,輸出,現在應該是:

現在時間是:2012-03-03T14:14:29.890-05:00

現在,如果你想使用Servlet 3.0和註釋這是默認情況下不啓用,爲什麼我不知道的原因。 首先強制Maven通過將這個添加到你的pom來使用Java 1.6,否則每次你更新你的pom時,配置都會恢復到Java 1.5。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
    </configuration> 
    </plugin> 

打開項目屬性 - >項目構面。將「動態Web模塊」下的版本更改爲3.0,更改java版本1.6

在src \ main \ java中創建一個類名爲AnnotatedServlet的新Servlet,並注意如何自動創建@WebServlet註釋。

選項2:創建動態Web項目再加入Maven的自然

  • 選擇Tomcat的運行系統和動態模塊3.0版
  • 創建源文件夾的src \主\ java中
  • 設置默認輸出目標\類
  • 設置上下文目錄src \ main \ webapp
  • 檢查生成web.xml
  • 創建映射/ *快速檢測
  • 的servlet添加輸出語句doGet方法

response.getWriter().println("Another test");

  • 雙擊「部署描述符」,這屬性添加到根web應用程序元素metadata-complete="false"

  • 右鍵單擊項目,然後選擇運行方式 - >在服務器上運行

  • 右鍵項目 - >配置 - >轉換爲Maven項目
  • 選擇包裝作爲戰爭
  • 編輯POM,並設置編譯器使用的Java 1.6,並添加喬達時依賴:

<dependencies> 
    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>2.1</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
+1

最近版本的eclipse(我的過程:創建新的maven項目,選擇web應用程序原型,將Maven依賴關係添加到部署程序集中,如此處接受的答案中所述,這似乎一般工作),但這個問題仍然相關的事實表明它仍然不完美*。但是,Web應用程序系統既不存在也不實際設計,並且考慮到使用IDE,這可能是我們遇到這種問題的原因。而.NET中的所有東西都是爲了與VS很好地集成而設計的。 – 2016-09-24 14:31:40

0

我遇到了類似的問題,雖然我已經正確配置了部署程序集,但它仍然無法工作。然後,我發現在「部署」選項卡下的窗口 - >首選項 - >我的Eclipse - > Java Enterprise項目 - > Web項目下,關閉了依賴項目的管理。我改變它將依賴項目的罐子部署到lib文件夾,然後所有東西都像魅力一樣工作。我甚至可以關閉部署程序集選項。

1

右鍵單擊Project Explorer中的Web項目,然後選擇Maven的 - >更新項目