用Eclipse+Maven+Jetty構建Java Web開發環境(綜合幾篇教程整合2014年版)

工作需要用到Jetty作爲web容器,得知Eclipse+Maven+Jetty的組合很不錯,因此到網上查找了很多教程,但是或多或少寫的不詳細或者有過時的內容在裏面導致最後配置失敗,爲了以後同事配置方便,寫下這篇配置教程,順便來方便一下大家。

用到的參考資料如下:

【用Maven構建Java Web開發環境(Jetty容器)】(以此教程爲主)http://sarin.iteye.com/blog/784275 以及 http://sarin.iteye.com/blog/784697

【在Eclipse中編寫servlet時出現"The import javax.servlet cannot be resolved" 問題解決辦法】http://blog.163.com/y_love_qq/blog/static/27637235201211141422583/
【使用maven加載項目中缺少的jar包】http://blog.csdn.net/daven_java/article/details/8775809

【Stackoverflow- maven jetty - org.mortbay.jetty vs org.eclipse.jetty】http://stackoverflow.com/questions/15386461/maven-jetty-org-mortbay-jetty-vs-org-eclipse-jetty

在此首先感謝這些作者的心血,把這些結合在一起我才終於配置成功。

下面開始正題。

=======================軟件環境=======================

『系統』Windows 7 x64

JAVAJDK 1.7.0_65

Eclipse Eclipse for JavaEE

Maven Apache Maven 3.2.2 

『Jetty jetty-distribution-8.1.15


=======================配置過程=======================

一、JAVA和Maven的配置(如果都配置好了而且清楚maven的用法可以直接跳過看第二部分)

這部分我就直接使用參考資料中的教程了,因爲寫得比較詳細也沒有錯誤。

(源地址:http://sarin.iteye.com/blog/784275)

    Maven是構建Java應用的優秀管理工具,是Apache軟件基金會的頂級項目。其具有開發目錄構建和管理,統一管理第三方依賴,編譯,測試,打包,發佈等功能。最大的特點要數第三方依賴管理了,因爲其它功能都能從Ant中找到蹤影。以往每個項目獨立管理依賴,使得每個項目打包後都是巨大無比的,而真正的程序文件卻沒有多少,Maven接管第三方依賴後,我們的應用就只有程序文件了,沒有了jar包輕巧很多,而統一的管理,使得我們可以隨意獲取jar資源。 
    初學者使用Maven總是感覺很難上手,其中也有一部分人是被Maven下載資源那瘋狂的做法嚇退的,這就是Maven的精巧之處。從Apache官方網站下載的Maven工具僅僅2M大小,其中是不包含我們要使用的依賴的,那麼就要從網絡中獲取這些依賴,就是那個瘋狂下載的過程。下面我們從頭開始構建Maven環境,直到運行Jetty容器執行Web應用,這一切都很簡單。 
    下載Maven的開發包之後,解壓到一個固定的文件夾,建議不要使用漢字並在磁盤的根目錄下,這是比較好的實踐。那麼本文以Maven 3爲例來說明,Maven的位置是F:\Maven 3目錄。解壓後就要添加系統環境變量,這裏要說明,因爲Maven也是Java應用,所以JDK就必須要提前安裝並設置環境遍歷。將JAVA_HOME和M3_HOME單獨設置,防止其使用時不能用Path變量下發現所需路徑。下面是JAVA_HOME和M3_HOME的配置位置,這個因人而異,但是最好固定不要隨意修改。 
 
 
    在Path中,這樣來添加即可,非常簡單。 
 
    至此Maven已經安裝完成了,下面我們來驗證安裝,在CMD中輸入mvn –v 
 
    可以看到,已經識別mvn命令了。做點簡單的設置,就是第三方依賴下載的時候的存放位置,默認是在C盤用戶目錄的當前用戶文件夾下(如C:\用戶\Admin,這裏是Windows 7的命名方式),在這裏Maven會創建.m2文件夾,這裏面就會存放下載的類庫。當然我不想這些類庫放在C盤下,不是特別安全,我想讓它們存放在Maven安裝目錄下,那麼就可以這樣進行:在Maven安裝目錄的conf下打開settings.xml,這是對Maven進行設置的XML文件,這裏我們簡單設置第三方依賴的位置,如下設置: 

Xml代碼  收藏代碼
  1. <localRepository>F:/Maven3/repository</localRepository>  

    這樣,那些瘋狂下載的依賴就在這個位置下了,要留給足夠大的空間,因爲依賴下載很可能佔用很大的一塊空間。爲什麼?下載後去看看它的真實面目就知道了。 
    下面我們就來創建應用目錄,使用mvn archetype:generate命令一步一步根據提示,選擇項目類型,添加groupId和artifactId就可以創建項目了,我們來看一下,這裏執行mvn archetype:generate -DarchetypeCatalog=internal命令,要手工設置一下項目類型分類屬性,可能因爲類型太多導致屏幕顯示不全,那麼我們就簡單來看幾個常用的就行,就是internal類型。執行該命令後,在控制檯我們看到有如下的內容。(切記這個操作位置就是生成項目目錄的位置) 
 
    這裏我們先選擇16是maven-archetype-quickstart,就是基本的JavaSE項目結構的構建,19是maven-archetype-webapp,用來創建簡單的Java Web應用,我們先選擇16來看看。 
 
    選擇16之後,Maven提示輸出groupId,就是我們的項目命名組成之一,沒什麼過多解釋的東西,artifactId用來標記項目名稱,它們兩個是聯合使用的。而package定義的是包名,我們在文件夾內就發現了demo命名的項目文件夾。看看這個目錄的結構,這是Maven爲我們創建的,就是一個標準的格式: 
 
    根目錄下有一個pom.xml,這就是項目的Maven配置文件,暫時不介紹其強大的功能,僅僅簡單看一下實際應用,這是基礎的目錄結構,Maven爲我們創建了一個Hello World的小程序,我們來運行它。想要運行這個程序,那麼就要編譯,mvn的編譯命令是mvn compile,這樣就爲我們編譯整個項目,這個操作要在demo目錄下完成。 
 
    回頭看看demo文件夾,多出一個target目錄,這就是我們的類路徑了,class文件就在下面。這個操作的逆過程是mvn clean,顧名思義,就是清理,清理生成的可執行部分,僅留下源碼部分,如下: 
 
    Maven執行了Deleting操作,刪除了target目錄。如果想執行程序,是需要class文件或jar文件的,前面的mvn compile命令僅僅是編譯,而沒有對應用進行打包發佈,而mvn package命令可以將應用打包(jar或war等),那麼我們就來爲項目打包發佈: 
 
    這個過程,Maven執行了很多操作,有日誌可以細看,其中還有測試過程,這是JUnit的測試。其實我們創建項目時,Maven爲我們引入的第一個依賴就是JUnit。下面我們來執行jar文件,運行程序。(當然執行class是一樣的效果) 
 
    這樣就得到執行效果了,Hello World! 


二、Eclipse+Maven+Jetty配置過程

   這一部分同樣以sarin博主的教程爲主,其中添加、修改了部分不詳細的或是過時的內容(會以暗紅色標出以示區別)。
   目前爲止我們還是手工命令行方式執行程序的,沒有和IDE結合,其實Maven天生就對Eclipse做了集成,我們使用mvn eclipse:eclipse就得到了一個Eclipse的項目結構,在Eclipse中使用import功能就能直接導入到IDE中了。我們來看一下這個過程: 
 
    此時的demo就是Eclipse項目格式的了,出現了.project和.classpath文件。我們在Eclipse中引入這個項目,此時的Eclipse沒有安裝Maven插件,不能自動運行Maven命令,我們來安裝Maven的Eclipse插件M2E。 
 
如果由於網絡原因Eclipse無法聯網安裝M2E插件,可以到這裏下載我上傳的離線包(安裝方式爲解壓後合併同名文件夾並重啓eclipse):
同樣的方法我們來安裝一下run-Jetty-run插件:
如果由於網絡原因Eclipse無法聯網安裝run-jetty-run插件,可以到這裏下載我上傳的離線包,然後在Install New Software的窗口點擊Add,然後選擇Archive,選中下載的壓縮包安裝即可,壓縮包地址:http://download.csdn.net/detail/u012510614/7667397

 在Eclipse的Install New Software中直接選擇安裝即可,非常簡單。下面我們來創建Web項目並導入Eclipse中,在Jetty容器中運行程序。如果你看了第一部分的教程,那麼請刪除第一部分建立的項目文件夾,或者另外新建一個maven項目,過程如下:
1、cmd呼出命令行窗口
2、mvn archetype:generate -DgroupId=com.cwbeta -DartifactId=demo-DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0(請將“com.cwbeta”替換成你的項目開發組,“demo”換成你的項目名稱)
3、cd到你的項目目錄
4、mvn eclipse:eclipse(使用這條指令使得項目成爲eclipse能夠導入的格式)
5、用Eclipse的File->Import導入該項目根目錄

上面幾部如果記不住可以寫一個批處理的腳本方便以後建立項目:
@echo off
set /p project_name=Name of the new project: 
set /p producer_name=Name of the producer: 
mvn archetype:generate -DgroupId=%producer_name% -DartifactId=%project_name% -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0
cd %project_name%
mvn eclipse:eclipse
echo [Press any key to exit]
pause>nul
exit

寫入記事本保存成bat格式文件粘貼到workspace的目錄運行即可。

 然後我們可以看到如下的Eclipse項目格式
 
 可以看到,剛創建的web項目結構包含了resources目錄,而沒有java代碼目錄,我們需要手工創建,在Eclipse中創建source folder,路徑爲src/main/java/src,創建方法如下:
在你的項目上右鍵 -> New -> Source Folder
Folder name填上路徑:src/main/java/src
勾上Update exclusion filters...選項(一定要勾否則不能創建)
Finish!

現在我們得到如下一個項目結構,新建一個Servlet用於測試,新建方法如下:
在你新建立的src/main/java/src的source file上右鍵 -> New -> Servlet
Java package填org.ourpioneer.servlets(源教程這麼寫,不知道是否能改,姑且先這麼寫着吧)
Class name填HelloWorldServlet
Finish!
然後你就會看到如下的文件脈絡。

如果在這裏你發現HelloWorldServlet.java有報錯說“The import javax.servlet cannot be resolved”,可以這麼解決:
在Eclipse中,右擊項目,選擇Build Path -> Configure Build Path... -> Libraries->Add External JARs,找到你計算機中Jetty(tomcat也適用)的安裝路徑,在lib文件夾下選中"servlet-api-3.0.jar",添加點擊“確定”,ok!
 
 此時,項目中沒有Servlet的依賴,需要添加,我們使用m2eclipse插件來直接添加依賴,如下所示:
雙擊項目根目錄的pom.xml -> 選擇Dependencies -> 左邊的add -> 如下圖配置

也可以手動編輯pom.xml
插入這一段:
 <dependency>  
        <groupId>javax.servlet</groupId>  
        <artifactId>servlet-api</artifactId>  
        <version>2.5</version>  
        <type>jar</type>  
        <scope>compile</scope>  
</dependency>  
 下面就可以編寫Servlet了,很簡單,就輸出HelloWorld吧(編輯HelloWorldServlet.java)。 
package org.ourpioneer.servlets;  
  
import java.io.IOException;  
import java.io.PrintWriter;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
public class HelloWorldServlet extends HttpServlet {  
  
    protected void doGet(HttpServletRequest request,  
            HttpServletResponse response) throws ServletException, IOException {  
        this.process(request, response);  
    }  
  
    protected void doPost(HttpServletRequest request,  
            HttpServletResponse response) throws ServletException, IOException {  
        this.process(request, response);  
    }  
  
    private void process(HttpServletRequest request,  
            HttpServletResponse response) throws ServletException, IOException {  
        response.setContentType("text/html;charset=utf-8");  
        response.setCharacterEncoding("utf-8");  
        PrintWriter out = response.getWriter();  
        String title="Webapp Demo";  
        out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");  
        out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\">");  
        out.println("<head>");  
        out.println("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />");  
        out.println("<title>" + title + "</title>");  
        out.println("<body>");  
        out.println("<h1>Hello World!</h1>");  
        out.println("</body>");  
        out.println("</html>");  
    }  
}  

源教程說需要再配置web.xml,而我用的eclipse自動配置完成了,所以這裏跳過。

 程序都有了,剩下就是運行了,Maven既然天生和Jetty是一對兒,這裏我們就使用Jetty吧,在Maven中配置Jetty,首先是webdefault.xml要準備好,它是配置Jetty的,這個可以從Jetty的包中找到,並複製到resources下,這裏多說一點,默認Jetty運行時是鎖定JS/CSS等靜態文件的,如果想在Jetty運行時也能修改它們,要在webdefault.xml中修改如下設置: 
<init-param>  
  <param-name>useFileMappedBuffer</param-name>  
  <param-value>false</param-value>  
</init-param> 

 Jetty也準備了,運行命令是jetty:run,這要在Maven中設置,那麼需要在pom.xml中加入Jetty的插件的設置信息。這裏直接貼出其整體構建信息。 
這部分注意,由於源教程貼出的構建信息中org.apache.maven.plugins這個plugin已不能使用(可以參考Jetty-Maven-Plugin的發展史:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html),因此我做了一些修改,換成了org.eclipse.jetty的jetty插件,版本爲9.0.0.v20130308(官網上給出的最新版本我這裏測試不可用,而此2013年的版本可以使用,因此使用該版本)。修改後的內容如下,修改方法也是編輯項目根目錄的pom.xml(雙擊然後選擇pom.xml選項卡即可編輯):
  <build>
    <finalName>demo</finalName>
        <sourceDirectory>src/main/java/src</sourceDirectory>  
    <testSourceDirectory>src/test</testSourceDirectory>  
    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-compiler-plugin</artifactId>  
            <version>2.0.2</version>  
            <configuration>  
                <source>1.6</source>  
                <target>1.6</target>  
                <encoding>utf-8</encoding>  
            </configuration>  
        </plugin>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-resources-plugin</artifactId>  
            <configuration>  
                <encoding>UTF-8</encoding>  
            </configuration>  
        </plugin>  
			<plugin>
			  <groupId>org.eclipse.jetty</groupId>
			  <artifactId>jetty-maven-plugin</artifactId>
			  <version>9.0.0.v20130308</version> <!-- latest at time of writing -->
			</plugin>
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-eclipse-plugin</artifactId>  
            <version>2.7</version>  
            <configuration>  
                <addVersionToProjectName>false</addVersionToProjectName>  
                <useProjectReferences>false</useProjectReferences>  
                <encoding>UTF-8</encoding>  
                <wtpmanifest>false</wtpmanifest>  
                <wtpapplicationxml>true</wtpapplicationxml>  
                <wtpversion>1.5</wtpversion>  
                <additionalBuildcommands>  
                    <buildcommand>org.eclipse.jdt.core.javabuilder</buildcommand>  
                    <buildcommand>org.eclipse.wst.common.project.facet.core.builder</buildcommand>  
                    <buildcommand>org.eclipse.wst.validation.validationbuilder</buildcommand>  
                </additionalBuildcommands>  
  
                <additionalProjectnatures>  
                    <nature>org.springframework.ide.eclipse.core.springnature</nature>  
                    <nature>org.maven.ide.eclipse.maven2Nature</nature>  
                    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>  
                    <nature>org.eclipse.jdt.core.javanature</nature>  
                    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>  
                </additionalProjectnatures>  
                <classpathContainers>  
                    <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>  
                </classpathContainers>  
            </configuration>  
        </plugin>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-war-plugin</artifactId>  
            <version>2.1-beta-1</version>  
            <configuration>  
                <warName>webapp</warName>  
            </configuration>  
        </plugin>  
    </plugins>  
  </build>

接着讓我們更新一下maven的依賴,用cmd命令行工具cd到項目的根目錄,執行mvn dependency:copy-dependencies。
需要更新一段時間,不過整個配置就快完成啦,可以站起來活動活動,放鬆一下~
更新完成後,我們就可以在Eclipse中配置Debug運行了。配置很簡單,如下:
Run -> Debug Configurations...
因爲安裝了run-jetty-run插件,Jetty運行的端口可以在這裏配置:

而Maven如下配置即可:


    這是Debug模式運行,Run模式下是一樣的,用Debug模式可以在Eclipse中斷點運行程序,非常便於調試。下面我們就讓它跑起來吧。運行命令是jetty:run,Base directory配置是:${workspace_loc:/應用名},啓動調試,看到如下信息,Jetty就成功啓動了。
 
 
    如果你使用了80端口,在瀏覽器中訪問地址如下:http://localhost/你的項目名稱,之後,我們就看到了效果。 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章