<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    John Jiang

    a cup of Java, cheers!
    https://github.com/johnshajiang/blog

       :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理 ::
      131 隨筆 :: 1 文章 :: 530 評論 :: 0 Trackbacks
    Maven入門--概念與實(shí)例
        最近由于工作原因在研究、應(yīng)用Maven,有了一些體會就寫成了此文。本文雖然是Maven2的入門文章,但并不涉及Maven的歷史、下載與安裝,這些內(nèi)容可以到Maven的官方網(wǎng)站上了解。本文主要是關(guān)注Maven中的重要概念,并以一個實(shí)例來闡述使用Maven的基本方法。文末有例子代碼下載的鏈接。(2007.01.02最后更新)
    注:轉(zhuǎn)載時請注明原作者(jiangshachina)及出處(http://www.tkk7.com/jiangshachina)!

    1 關(guān)鍵名詞

        Project:任何您想build的事物,Maven都可以認(rèn)為它們是工程。這些工程被定義為工程對象模型(POM,Poject Object Model)。一個工程可以依賴其它的工程;一個工程也可以由多個子工程構(gòu)成。
        POM:POM(pom.xml)是Maven的核心文件,它是指示Maven如何工作的元數(shù)據(jù)文件,類似于Ant中的build.xml文件。POM文件位于每個工程的根目錄中。
        GroupId:groupId是一個工程的在全局中唯一的標(biāo)識符,一般地,它就是工程名。groupId有利于使用一個完全的包名,將一個工程從其它有類似名稱的工程里區(qū)別出來。
        Artifact:artifact是工程將要產(chǎn)生或需要使用的文件,它可以是jar文件,源文件,二進(jìn)制文件,war文件,甚至是pom文件。每個artifact都由groupId和artifactId組合的標(biāo)識符唯一識別。需要被使用(依賴)的artifact都要放在倉庫(見Repository)中,否則Maven無法找到(識別)它們。
        Dependency:為了能夠build或運(yùn)行,一個典型的Java工程會依賴其它的包。在Maven中,這些被依賴的包就被稱為dependency。dependency一般是其它工程的artifact。
        Plug-in:Maven是由插件組織的,它的每一個功能都是由插件提供的。插件提供goal(類似于Ant中的target),并根據(jù)在POM中找到的元數(shù)據(jù)去完成工作。主要的Maven插件要是由Java寫成的,但它也支持用Beanshell或Ant腳本寫成的插件。
        Repository:倉庫用于存放artifact,它可以是本地倉庫,也可以是遠(yuǎn)程倉庫。Maven有一個默認(rèn)的遠(yuǎn)程倉庫--central,可以從http://www.ibiblio.org/maven2/下載其中的artifact。在Windows平臺上,本地倉庫的默認(rèn)地址是User_Home\.m2\repository
        Snapshot:工程中可以(也應(yīng)該)有一個特殊版本,它的版本號包括SNAPSHOT字樣。該版本可以告訴Maven,該工程正處于開發(fā)階段,會經(jīng)常更新(但還未發(fā)布)。當(dāng)其它工程使用此類型版本的artifact時,Maven會在倉庫中尋找該artifact的最新版本,并自動下載、使用該最新版。
    2 Maven Build Life Cycle
        軟件項(xiàng)目一般都有相似的開發(fā)過程:準(zhǔn)備,編譯,測試,打包和部署,Maven將上述過程稱為Build Life Cycle。在Maven中,這些生命周期由一系列的短語組成,每個短語對應(yīng)著一個(或多個)操作;或?qū)?yīng)著一個(或多個)goal(類似于Ant中的target)。
        如編譯源文件的命令mvn compile中的compile是一個生命周期短語。同時該命令也可以等價于mvn compiler:compile,其中的compiler是一個插件,它提供了compile(此compile與mvn compile中的compile意義不同)goal;compiler還可提供另一個goal--testCompile,該goal用于編譯junit測試類。
        在執(zhí)行某一個生命周期時,Maven會首先執(zhí)行該生命周期之前的其它周期。如要執(zhí)行compile,那么將首先執(zhí)行validate,generate-source,process-source和generate-resources,最后再執(zhí)行compile本身。關(guān)于Maven中默認(rèn)的生命周期短語,請見參考資源[6]中的附錄B.3
    3 標(biāo)準(zhǔn)目錄布局
        Maven為工程中的源文件,資源文件,配置文件,生成的輸出和文檔都制定了一個標(biāo)準(zhǔn)的目錄結(jié)構(gòu)。Maven鼓勵使用標(biāo)準(zhǔn)目錄布局,這樣就不需要進(jìn)行額外的配置,而且有助于各個不同工程之間的聯(lián)接。當(dāng)然,Maven也允許定制個性的目錄布局,這就需要進(jìn)行更多的配置。關(guān)于Maven的標(biāo)準(zhǔn)目錄布局,請見參考資源[6]中的附錄B.1
    4 Maven的優(yōu)點(diǎn)
        [1]build邏輯可以被重用。在Ant中可能需要多次重復(fù)地寫相同的語句,但由于POM的繼承性,可以復(fù)用其它的POM文件中的語句。這樣既可以寫出清晰的build語句,又可以構(gòu)造出層次關(guān)系良好的build工程。
        [2]不必關(guān)注build工作的實(shí)現(xiàn)細(xì)節(jié)。我們只需要使用一些build生命周期短語就可以達(dá)到我們的目標(biāo),而不必管Maven是如何做到這些的。如,只需要告訴Maven要安裝(install),那么它自然就會驗(yàn)證,編譯,打包,及安裝。
        [3]Maven會自動加載工程依賴的artifact所依賴的其它artifact(Transitive Dependency),而不用顯示的將這些artifact全部寫到dependency中。
        [4]如果完全使用Maven的標(biāo)準(zhǔn)目錄布局,那么可以極大地減少配置細(xì)節(jié)。
    5 實(shí)例
    5.1 構(gòu)想
        由于只是闡述Maven的基本使用方法,所以本文將要設(shè)計的實(shí)例,只是一個簡單的Maven demo。該實(shí)例包含兩個工程:普通應(yīng)用程序工程(app)和Web應(yīng)用工程(webapp)。app工程提供一個簡單的Java類;webapp工程只包含一個Servlet,并將使用app中的Java類。
        該Demo的目標(biāo)是能夠正確地將webapp制成war包,以供部署時使用。要能夠正確制作war,自然首先就必須要能夠正確的編譯源代碼,且要將App模塊制成jar包。本文創(chuàng)建的工程所在的目錄是D:\maven\demo
    5.2 App工程
        可以使用Maven的archetype插件來創(chuàng)建新工程,命令如下:
        D:\maven\demo>mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=app
    該工程的groupId是ce.demo.mvn,那么該工程的源文件將放在Java包c(diǎn)e.demo.mvn中。artifactId是app,那么該工程根目錄的名稱將為app。
        當(dāng)?shù)谝淮螆?zhí)行該命令時,Maven會從central倉庫中下載一些文件。這些文件包含插件archetype,以及它所依賴的其它包。該命令執(zhí)行完畢后,在目錄D:\maven\demo下會出現(xiàn)如下目錄布局:
    app
    |-- pom.xml
    `-- src
        |-- main
        |   `-- java
        |       `-- ce
        |           `-- demo
        |               `-- mvn
        |                   `-- App.java
        `-- test
            `-- java
                `-- ce
                    `-- demo
                        `-- mvn
                            `-- AppTest.java
    因本文暫時不涉及JUnit測試,故請將目錄app\src\test目錄刪除(不刪除也沒關(guān)系 ^_^)。然后再修改App.java文件,其完全內(nèi)容如下:
    package ce.demo.mvn;
    public class App {
        
    public String getStr(String str) {
            
    return str;
        }

    }
    其實(shí),如果我們能夠清楚地知道Maven的標(biāo)準(zhǔn)目錄布局,就可以不使用archetype插件來創(chuàng)建工程原型;如果我們要定制個性的目錄布局,那么就更沒有必要使用archetype插件了。
    5.3 WebApp工程
        我們?nèi)匀蝗鐒?chuàng)建app工程一樣使用archetype插件來創(chuàng)建webapp工程,命令如下:
        D:\maven\demo>mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=webapp -DarchetypeArtifactId=maven-archetype-webapp
        第一次運(yùn)行此命令時,也會從central倉庫中下載一些與Web應(yīng)用相關(guān)的artifact(如javax.servlet)。此命令與創(chuàng)建app的命令的不同之處是,多設(shè)置了一個屬性archetypeArtifacttId,該屬性的值為maven-archetype-webapp。即告訴Maven,將要創(chuàng)建的工程是一個Web應(yīng)用工程。創(chuàng)建app工程時沒有使用該屬性值,是由于archetype默認(rèn)創(chuàng)建的是應(yīng)用程序工程。同樣的,執(zhí)行完該命令之后,會出現(xiàn)如下標(biāo)準(zhǔn)目錄布局:
    webapp
    |-- pom.xml
    `-- src
        `-- main
            `-- webapp
               
    |-- index.jsp
                |-- WEB-INF
                    `-- web.xml
        根據(jù)5.1節(jié)的構(gòu)想,webapp工程將只包含一個Servlet,所以我們不需要index.jsp文件,請將其刪除。此時大家可以發(fā)現(xiàn),目前的目錄布局中并沒有放Servlet,即Java源文件的地方。根據(jù)參考資源[6]中的附錄B.1,以及app工程中Java源文件的布局,可以知道Servlet(它仍然是一個Java類文件)仍然是放在webapp\src\main\java目錄中,請新建該目錄。此處的Servlet是一個簡單HelloServlet,其完整代碼如下:
    package hello;

    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;

    import ce.demo.mvn.App;  // 引用app工程中的App類

    public class HelloServlet extends HttpServlet {
        
    private static final long serialVersionUID = -3696470690560528247L;
        
    public void doGet(HttpServletRequest request, HttpServletResponse response)
                
    throws ServletException, IOException {
            App app 
    = new App();
            String str 
    = app.getStr("CE Maven Demo");
            PrintWriter out 
    = response.getWriter();
            out.print(
    "<html><body>");
            out.print(
    "<h1>" + str);
            out.print(
    "</body></html>");
        }

    }
    5.4 POM文件
        大家可以發(fā)現(xiàn),在前面新建工程時,我們并沒有提到各個工程中的pom.xml文件。現(xiàn)在將要討論這個問題。我們先看看app工程中的POM文件,其完整內(nèi)容如下:
    <project>
      
    <modelVersion>4.0.0</modelVersion>
      
    <groupId>ce.demo.mvn</groupId>
      
    <artifactId>app</artifactId>
      
    <packaging>jar</packaging>
      
    <version>1.0</version>
      
    <name>CE Maven Demo -- App</name>
    </project>
        大家可以發(fā)現(xiàn)此我帖出來的內(nèi)容與實(shí)際由archetype插件生成的POM文件的內(nèi)容有些不同,但基本上是一致的。只是為了使文件中的語句更清晰,此處刪除了一些冗余的內(nèi)容,并修改了該工程的version和name的值,以與此例子的背景來符合。在目前情況下modelVersion值將被固定為4.0.0,這也是Maven2唯一能夠識別的model版本。groupId,artifactId的值與創(chuàng)建工程時使用的命令中的相關(guān)屬性值是一致的。packaging的值由工程的類型決定,如應(yīng)用程序工程的packaging值為jar,Web應(yīng)用工程的packaging值為war。上述情況也可以從webapp的POM文件中看出,下面將看看這個pom的完整內(nèi)容。
    <project>
      
    <modelVersion>4.0.0</modelVersion>
      
    <groupId>ce.demo.mvn</groupId>
      
    <artifactId>webapp</artifactId>
      
    <packaging>war</packaging>
      
    <version>1.0</version>
      
    <name>CE Maven Demo -- WebApp</name>
      
      
    <dependencies>
          
    <dependency>
              
    <groupId>ce.demo.mvn</groupId>
              
    <artifactId>app</artifactId>
              
    <version>1.0</version>
          
    </dependency>
        
    <dependency>
            
    <groupId>javax.servlet</groupId>
            
    <artifactId>servlet-api</artifactId>
            
    <version>2.4</version>
            
    <scope>provided</scope>
        
    </dependency> 
      
    </dependencies>
    </project>
        比較app與webapp中的POM,除前面已經(jīng)提過的packaging的差別外,我們還可以發(fā)現(xiàn)webapp中的POM多了dependencies項(xiàng)。由于webapp需要用到app工程中的類(見HelloServlet源代碼),它還需要javax.servlet包(因?yàn)樵摪⒉荒J(rèn)存在于jsdk中)。故,我們必須要將它們聲明到依賴關(guān)系中。
    5.5 執(zhí)行
        上述兩個工程創(chuàng)建完畢后,就需要執(zhí)行一些命令來看看會有什么結(jié)果出現(xiàn)。我們首先進(jìn)入app目錄,并執(zhí)行命令mvn compile,然后會在該目錄下發(fā)現(xiàn)新生成的目錄target\classes,即編譯后的class文件(包括它的包目錄)就放在了這里。再執(zhí)行命令mvn package,在目錄target中就會生成app-1.0.jar文件。該文件的全名由如下形式確定:artifactId-version.packaging。根據(jù)第2章的敘述可以知道,執(zhí)行命令mvn package時,將首先將產(chǎn)生執(zhí)行命令mvn compile之后的結(jié)果,故如果要打包,那么只需要執(zhí)行mvn package即可。
        在app工程中執(zhí)行完之后,就需要進(jìn)入webapp工程了。進(jìn)入webapp目錄,此次將只執(zhí)行mvn package命令(隱示地執(zhí)行了compile過程)。此次命令的執(zhí)行并不成功,會出現(xiàn)如下問題:
    D:\maven\demo\webapp>mvn package
    ……
    Downloading: http://repo1.maven.org/maven2/ce/demo/mvn/app/
    1.0/app-1.0.pom
    [INFO] ------------------------------------------------------------------------
    [ERROR] BUILD ERROR
    [INFO] ------------------------------------------------------------------------
    [INFO] Error building POM (may not be this project's POM).
    Project ID: ce.demo.mvn:app
    Reason: Error getting POM for 'ce.demo.mvn:app' from the repository: Error transferring file
      ce.demo.mvn:app:pom:
    1.0
    from the specified remote repositories:
      central (http://repo1.maven.org/maven2)
    ……
        由粗體內(nèi)容可知,Maven正試圖從central倉庫下載app工程的artifact,但central倉庫肯定不會有這個artifact,其結(jié)果只能是執(zhí)行失敗!由第1章artifact名詞的解釋可知,被依賴的artifact必須存在于倉庫(遠(yuǎn)程或本地)中,但目前webapp所依賴的app必不存在于倉庫中,所以執(zhí)行只能失敗。
        解決這個問題有兩種方法:[1]將app-1.0.jar安裝到倉庫中,使它成為一個artifact;[2]構(gòu)建一個更高層次的工程,使app和webapp成為這個工程的子工程,然后從這個更高層次工程中執(zhí)行命令。
        第一種方法比較簡單(http://www.tkk7.com/jiangshachina/admin/EditPosts.aspx中的第一個主題),此處將詳細(xì)討論第2種方法(見5.6節(jié))。
    5.6 更高層次工程
        我們可以將app和webapp的上一級目錄demo作為這兩個工程的
    一個 更高層次工程,即使用app和webapp成為這個工程的子工程。為了使demo目錄成為一個demo工程,只需要在這個目錄下添加一個pom.xml文件,該文件內(nèi)容如下:
    <project>
        
    <modelVersion>4.0.0</modelVersion>
        
    <groupId>ce.demo</groupId>
        
    <artifactId>mvn-demo</artifactId>
        
    <packaging>pom</packaging>
        
    <version>1.0</version>
        
    <name>CE Maven Demo</name>
        
        
    <modules>
            
    <module>app</module>
            
    <module>webapp</module>
        
    </modules>
    </project>
        與app和webapp中的POM相比,demo的POM使用了modules項(xiàng),modules用于聲明本工程的子工程,module中的值對應(yīng)于子工程的artifact名。而且該P(yáng)OM的packaging類型必須為pom。
        有了demo工程后,我們只需要在demo目錄下執(zhí)行相關(guān)命令就可以了。通過如下命令即可驗(yàn)證:
        [1]mvn clean – 消除工程(包括所有子工程)中產(chǎn)生的所有輸出。這本文的實(shí)例中,實(shí)際上是刪除target目錄。由于之前的操作只有app工程產(chǎn)生了target目錄,而webapp并沒有,所以將只會刪除app工程中的target目錄。
        [2]mvn package – 將工程制作成相應(yīng)的包,app工程是作成jar包(app-1.0.jar),webapp工程是作成war包(webapp-1.0.war)。打開webapp-1.0.war包,可以發(fā)現(xiàn)app-1.0.jar被放到了WEB-INF的lib目錄中。
    6 小結(jié)
        通過以上的敘述與實(shí)例,應(yīng)該可以對Maven有一個粗略的認(rèn)識了。使用Maven關(guān)鍵是要弄清楚如何寫pom.xml文件,就如同使用Ant要會寫build.xml文件一樣。在POM中可以直接寫入Ant的task腳本,也可以調(diào)用Ant的build.xml文件(推薦),所以Maven也可以完成Ant的絕大多數(shù)工作(但不必安裝Ant)。注意:使用Maven就不要再過多的使用Ant腳本
        利用好Maven的繼承特性及子工程的關(guān)系,可以很好地簡化POM文件,并能夠構(gòu)建層次結(jié)構(gòu)良好的工程,有利于工程的維護(hù)。
    7 參考資源
    [1]Maven官方網(wǎng)站. http://maven.apache.org
    [2]Maven POM文件參考結(jié)構(gòu). http://maven.apache.org/ref/current/maven-model/maven.html
    [3]Super POM. http://maven.apache.org/guides/introduction/introduction-to-the-pom.html
    [4]Maven主要插件的列表. http://maven.apache.org/plugins
    [5]Maven基本使用指南. http://maven.apache.org/guides/index.html
    [6]Better Build with Maven. http://www.mergere.com/m2book_download.jsp -- 強(qiáng)烈推薦
    [7]介紹Maven2. http://www.javaworld.com/javaworld/jw-12-2005 /jw-1205-maven_p.html
    [8]揭秘Maven2 POM. http://www.javaworld.com/javaworld/jw-05-2006/jw-0529-maven.html
    [9]Maven讓事情變得簡單. http://www-128.ibm.com/developerworks/cn/java/j-maven
    [10]Maven文檔集. http://docs.codehaus.org/display/MAVENUSER/Home
    [11]有效利用Maven2的站點(diǎn)生成功能. http://www.matrix.org.cn/resource/article/44/44491_Maven2.html
    文中例子程序下載:http://www.tkk7.com/files/jiangshachina/maven.rar

    請關(guān)注本人的另一篇關(guān)于Maven的文章--Maven入門--較復(fù)雜的實(shí)例
    posted on 2006-09-01 13:43 John Jiang 閱讀(56561) 評論(29)  編輯  收藏 所屬分類: Maven原創(chuàng)

    評論

    # re: Maven入門--概念與實(shí)例 2006-11-26 14:52 cmd
    辛苦了,收益非淺,如果結(jié)合eclipse 生成工程并結(jié)合svn說明一下開發(fā)人員和管理人員如何使用mvn,就更有助于實(shí)際工作了,期待!   回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例 2006-11-27 09:01 Sha Jiang
    生成Eclipse工程:mvn eclipse:eclipse

    與SCM(CVS,SVN...)的結(jié)合也比較容易,一般只需要設(shè)置scm這個元素就可以了。請參見:
    http://maven.apache.org/ref/current/maven-model/maven.html#class_scm
    然后再使用maven-scm-plugin
    http://maven.apache.org/scm/plugins/
    就可以做checkout等等工作了。

    最近在寫一篇關(guān)于Maven的較復(fù)雜應(yīng)用實(shí)例的文章,文中會盡量多使用一些插件及其設(shè)置,敬請關(guān)注 ^_^  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例 2006-12-23 18:32 Sha Jiang
    剛剛在IBM的developerWorks中看到一篇介紹Maven2的好文章,不敢獨(dú)享 ^_^
    http://www-128.ibm.com/developerworks/edu/j-dw-java-mavenv2.html?S_TACT=105AGX02&S_CMP=HP
    不過,需要首先注冊才能閱讀全文。  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例 2007-06-24 23:02 sitinspring
    屆時發(fā)布Web工程時定來細(xì)讀.  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例 2007-06-25 08:15 Sha Jiang
    謝謝!
    希望能有所幫助 :)  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2007-07-19 10:44 tucy
    請問一下:若是我想運(yùn)行用maven生成的項(xiàng)目中的某個帶main()的類,該用什么命令來運(yùn)行,謝謝!  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原)[未登錄] 2007-08-07 17:05 sclsch
    老大,寫得不錯。收藏一下。  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2007-08-07 19:47 Sha Jiang
    > 請問一下:若是我想運(yùn)行用maven生成的項(xiàng)目中的某個帶main()的類,
    > 該用什么命令來運(yùn)行,謝謝!
    我沒有試過,也許可以用Ant來做。  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2007-11-02 22:14 oliverlee
    我按照作者說的做了但最后運(yùn)行 mvn package的時候還是不成功,

    Missing:
    -----------------
    ce.demo.mvn:app:jar:1.0

    是什么原因啊,請指點(diǎn)一下!謝謝  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原)[未登錄] 2008-01-14 10:22 test
    感謝作者,,,,樓上是不是進(jìn)入的目錄不正確啊,應(yīng)該在demo目錄運(yùn)行mvn package,而不能在webapp目錄。。繼續(xù)學(xué)習(xí)中。。  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2008-01-14 12:08 Sha Jiang
    > 應(yīng)該在demo目錄運(yùn)行mvn package,而不能在webapp目錄
    如果是這樣的話,應(yīng)該會報找不到POM文件,除非再特別地指定POM的路徑。  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2008-01-15 17:23 Sha Jiang
    > > 應(yīng)該在demo目錄運(yùn)行mvn package,而不能在webapp目錄
    > 如果是這樣的話,應(yīng)該會報找不到POM文件,除非再特別地指定POM的路徑。
    我想錯了。
    時間太長,有些東西也忘了 :-D  回復(fù)  更多評論
      

    好文章  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2008-02-15 09:16 Sha Jiang
    Cool ^_^
    P.S. Happy Lunar New Year!  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2008-02-15 18:30 longwen
    謝謝,幫了挺大的忙,謝謝.......  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2008-12-25 09:58 Yvon
    正在項(xiàng)目中用到這個,謝謝  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2008-12-26 18:59 Sha Jiang
    很長時間不用了,都有些忘了;-(  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2010-12-02 14:57 Rosen
    我是進(jìn)來學(xué)習(xí)的,呵呵  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2010-12-02 18:55 Sha Jiang
    Rosen兄,好久不聯(lián)系了*_*  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2011-09-14 15:41 Tony.Wang
    6]Better Build with Maven. http://www.mergere.com/m2book_download.jsp -- 強(qiáng)烈推薦 這個資源需要賬戶信息,能提供個否  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2011-09-14 15:41 Tony.Wang
    文中的例子沒有問題,搞這個關(guān)鍵是要搞清楚文件路徑關(guān)系  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2012-01-29 14:46 songjy
    執(zhí)行mvn package命令出現(xiàn)以下情況

    [WARNING] The POM for org.apache.maven.plugins:maven-surefire-plugin:jar:2.7.2
    s invalid, transitive dependencies (if any) will not be available, enable debug
    logging for more details

    [ERROR] Failed to parse plugin descriptor for org.apache.maven.plugins:maven-su
    efire-plugin:2.7.2 (C:\Documents and Settings\Administrator\.m2\repository\org\
    pache\maven\plugins\maven-surefire-plugin\2.7.2\maven-surefire-plugin-2.7.2.jar
    : error in opening zip file -> [Help 1]  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原)[未登錄] 2012-10-03 15:21 tony
    樓主見此文,豁然開朗,用了一年多的maven,不知其因,甚是感激  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2012-10-04 23:10 Sha Jiang
    @tony
    這篇文章的歷史太久遠(yuǎn)了,現(xiàn)在的Maven應(yīng)該有很大變化了吧...我都已經(jīng)很長很長很長時間沒關(guān)注Maven了 :-(  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2013-01-15 10:16 劍橋
    非常好  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2014-04-29 14:19 Gemma
    @oliverlee
    我的也不成功啊,  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2014-04-29 14:44 Gemma
    寫的真好,只是我按照文章一步步寫下來但是不能打包成功,但是載了源代碼就可以運(yùn)行成功,真不知道哪里出錯了。  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2014-08-25 18:38 zuidaima
    maven構(gòu)建java web demo項(xiàng)目源代碼下載:http://zuidaima.com/share/kmaven-p1-s1.htm  回復(fù)  更多評論
      

    # re: Maven入門--概念與實(shí)例(原) 2015-05-27 16:48 bingo
    太棒了  回復(fù)  更多評論
      

    主站蜘蛛池模板: AV大片在线无码永久免费| 无码国产精品一区二区免费16| 成视频年人黄网站免费视频| 中文字幕亚洲综合久久2| 特级做A爰片毛片免费看无码| 国产性爱在线观看亚洲黄色一级片| 香蕉97碰碰视频免费| 亚洲AV无码乱码精品国产| 男人免费视频一区二区在线观看 | 无码欧精品亚洲日韩一区夜夜嗨 | 免费人妻无码不卡中文字幕系| 亚洲AV永久精品爱情岛论坛| 免费黄网站在线看| 久久亚洲春色中文字幕久久久 | 黄网址在线永久免费观看| 亚洲AV色欲色欲WWW| 免费人成无码大片在线观看| 一级特黄特色的免费大片视频| 国产亚洲精午夜久久久久久| 免费在线中文日本| 亚洲免费人成视频观看| 国产高清免费观看| 国产A∨免费精品视频| 亚洲AV色香蕉一区二区| 免费专区丝袜脚调教视频| 亚洲码欧美码一区二区三区| 亚洲AⅤ无码一区二区三区在线| www免费插插视频| 亚洲国产精品lv| 免费av欧美国产在钱| 免费无码国产在线观国内自拍中文字幕| 亚洲精品动漫人成3d在线| 免费在线看黄的网站| 亚洲粉嫩美白在线| 精品亚洲一区二区三区在线播放| 精品成人免费自拍视频| 国产精品亚洲精品青青青| 亚洲日韩精品无码专区网站| 18禁止看的免费污网站 | 一进一出60分钟免费视频| 亚洲午夜未满十八勿入|