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

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

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

    京山游俠

    專注技術,拒絕扯淡
    posts - 50, comments - 868, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    參考資料:
      1.Maven官方文檔http://maven.apache.org/guides/index.html
      2.Git官方文檔http://git-scm.com/documentation
      3.SpringSide4官方文檔https://github.com/springside/springside4/wiki

      本博文不同于網上隨處可見的《Maven使用教程》《Git使用教程》等之類的文章。我并不會從軟件的安裝和基本的命令開始講起,而是通過探討他們包含了哪些設計哲學和能為我們帶來什么樣的項目管理體驗,讓大家能在最短的時間內通過一篇博客上手Maven和Git。
      Maven是一個優秀的Java項目管理工具。在用Java做項目時,項目的創建、編譯、測試、打包和安裝部署都需要敲入不少的命令,而且在編譯和運行Java程序時,必須能從CLASSPATH中找到該項目依賴的jar包,否則編譯無法順利進行,更不可能成功運行。為解決這些問題,Maven應運而生。

    Maven的特點:
      1.可以根據模板創建項目,也可以從已有的項目生成模板,這里的模板,Maven術語叫archetype;
      2.自動管理依賴的jar;
      3.配置文件非常簡短;
      4.可以有非常豐富的插件,對大部分人來說,使用插件非常簡單,不需要了解插件怎么編寫,而且插件的下載和管理都是自動的。

    Maven關鍵詞:convention; phase; archetype; groupId; artifactId; plugin; task; dependency; repository

    以下是我對Maven的理解。
      Maven管理一個項目時,會在項目的目錄下放一個pom.xml配置文件,該配置文件非常簡短。之所以能夠做到讓配置文件非常簡短,是因為Maven管理項目的時候遵循的是一種慣例(convention),Maven項目的目錄結構基本是固定的,而且對項目管理中的各個階段(phase)的定義也是固定的,所以即使不在pom.xml配置文件中做任何特殊定義,也可以使用Maven的標準命令mvn compile、mvn test、mvn package、mvn install自動進行項目的編譯、測試、打包、安裝。
      對于復雜的任務則是通過插件(plugin)來完成,定義在插件中的操作稱為任務(task),使用的格式為mvn plugin:task。使用Maven創建一個新項目就是通過archetype插件的generate任務做到的,命令格式為mvn archetype:generate。同樣,可以為Maven管理的項目生成Eclipse的項目文件,命令為mvn eclipse:eclipse。插件和依賴項一樣,也是自動下載和管理的,不需要用戶干預。
      自動下載的依賴項和插件都存放在本地倉庫(repository)中,該倉庫一般位于用戶目錄的.m2目錄下。我們自己的項目執行mvn install時,也默認安裝到該倉庫中。每一個項目都需要用groupId、artifactId和version來標識,包括我們自己的項目、依賴項、插件、創建新項目要用到的模板等都是如此。使用mvn archetype:generate創建新項目時需要指定archetypeGroupId和archetypeArtifactId。groupId代表該項目所在的小組,比如org.apache.maven,這是Java世界的命名哲學,在這里不詳細敘述,artifactId則只需要簡單指定一個項目的名字即可,打包成jar文件的時候,會生成名字為artifactId-version.jar的文件。
      下面看具體示例。如果要創建一個空項目,使用如下命令:
    mvn archetype:generate \
    -DarchetypeGroupId
    =org.apache.maven.archetypes \
    -DarchetypeArtifactId
    =maven-archetype-quickstart \
    -DgroupId
    =com.xkland.maven-example \
    -DartifactId
    =maven-example
      如果要生成一個空白的Web項目,使用如下命令:
    mvn archetype:generate \
    -DarchetypeGroupId
    =org.apache.maven.archetypes \
    -DarchetypeArtifactId
    =maven-archetype-webapp \
    -DgroupId
    =com.xkland.maven-web-example \
    -DartifactId
    =maven-web-example
    從上面命令可以看出,要創建不同類型的項目,只需要指定不同的archetype即可。下面我們看看用以上命令生成的項目的文件結構。

      再以SpringSide4為例。先從Github上將SpringSide4克隆下來。(稍后會講到Git)命令如下:
    git clone https://github.com/springside/springside4.git
      進入springside4目錄,可以看到里面有三個主要的目錄,分別為examples、modules、supports。進入到modules目錄,運行mvn install就可以將SpringSide4安裝到本地倉庫了,就這么簡單。不過,這個操作要花的時間比較長,因為需要下載很多依賴的庫。
      安裝好SpringSide4后,要創建基于SpringSide的項目,先進入support/maven-archetype目錄,運行mvn install安裝SpringSide的archetype,然后只需要如下命令即可:
    mvn archetype:generate \
    -DarchetypeGroupId
    =org.springside.examples \
    -DarchetypeArtifactId
    =quickstart-archetype \
    -DarchetypeVersion
    =4.1.1-SNAPSHOT \
    -DgroupId
    =com.xkland.springside-sample \
    -DartifactId
    =springside-example
      該命令涉及到的知識不超過我之前的論述。我這里沒有講到pom.xml文件的配置語法,大家可以參考官方文檔,后面,我們會進入IDE時代。

      軟件開發過程中,還有另外一個問題需要解決,那就是源代碼的版本控制和多人協作。現在最流行的是版本控制軟件是Git,越來越多的開源軟件從Subversion遷移到了Git。
    Git的特點:
      1.Git是分布式的版本控制系統,它沒有中心服務器的概念(雖然實際開發中可以建一個中心服務器),每一臺開發機器上都保存完整的歷史記錄;但是它有本地代碼倉庫和遠程代碼倉庫的概念(不然怎么多人協作?),而且可以追蹤多個遠程倉庫;
      2.Git能夠非常快地建立分支和合并分支,并具有強大的跟蹤分支和切換分支的能力。
      以上兩個特點決定了使用Git工作的流程。關于Git的使用和工作流程,我將在后面詳細敘述。先來看看要理解Git需要理解哪些關鍵詞。
    Git的關鍵詞:working directory; repository; stage; commit; remote; branch; merge
    下面是我的理解。
      每一個項目都應該有一個工作目錄(Working directory),我們可以自己建一個目錄(這不是廢話嗎?別急,下面還有。),然后把這個目錄里面的代碼用Git管理起來(使用git init命令和git add命令,后面詳述),也可以通過git clone命令從別的地方克隆一個項目過來自動生成一個工作目錄。在工作目錄中的文件就是當前編輯和修改的文件,如果是新建立的目錄或新clone來的目錄,工作目錄中的文件就是該項目最新的狀態。Git是在本地保存有所有的歷史記錄和分支記錄的,這些內容都在工作目錄的.git目錄中,稱之為本地倉庫(local repository)。當切換分支或查看以前的歷史版本時,工作目錄中的文件自動改變(這才是重點,工作無需切換目錄,目錄中的文件會自動切換)。工作目錄中的文件有三種狀態:已修改、已暫存(stage)、已提交。修改后的文件可以先加入暫存區域,一次工作結束后一起提交。
      Git是分布式的,沒有中心服務器的概念,但實際工作中仍然可以把代碼倉庫放到一臺大家都可以訪問的服務器上,做實際的中心服務器使用(僅在小團隊時使用此工作流程,原因后面詳述)。在本地機器上工作完后,使用git push命令把倉庫推送到服務器上,換一個地方換一臺機器后,只需要git clone一下,又可以獲得所有的代碼(包含所有的歷史記錄及分支)繼續工作。服務器故障也沒問題,因為每一個工作的機器上都保存有完整的代碼倉庫,所以從不用擔心代碼丟失。沒有網絡也沒有關系,在本地機器上照樣可以提交(git commit),因為整個倉庫就在自己的機器上,當有網絡時,push一下就可以了。
      Git有遠程倉庫(remote repository)的概念,而且可以管理很多個遠程倉庫,遠程倉庫可以是服務器,也可以是別人的個人計算機(但一般沒有人這么用),每一個遠程倉庫都有一個簡短的名字和一個地址,最開始clone代碼的那個遠程倉庫別名往往默認為origin,自己添加的遠程倉庫可以隨意指定別名,當然所有的遠程倉庫都可以隨意修改別名。可以從遠程倉庫獲取代碼(git fetch命令或git pull命令),也可以把自己的代碼推送到遠程倉庫(git push命令,需要寫權限)。
      既然Git即可以隨便從遠程倉庫獲取代碼,又可以把自己的代碼推送到遠程倉庫,那么當多人協作時,豈不會亂套嗎?解決這個問題的,就是Git的必殺之技——創建分支及分支合并。下面要用圖表來說明問題了。下面一系列圖片來自Git官方網站上的電子書《Pro Git》。
      首先,隨著一次次的提交,在本地代碼庫中形成一個主分支,如下圖:

    有時為了開發新特性,隨時可以開一個新分支,如下圖:



    新分支和主分支之間可以隨意切換,隨著分支的發展,形式如下圖:



    主分支也可以向前發展,如下:



    最終,當新分支代碼很穩定以后,可以將其合并到主分支,如下圖:



    而能夠防止多人協作時出現混亂的關鍵就在于,當從遠程倉庫clone代碼庫到本地或fetch代碼庫到本地時,遠程分支的標記并不等于本地分支的標記。從遠程clone一個代碼庫到本地后,其master分支有兩個標記,一個標記為origin/master表示遠程庫中的master分支,一個標記為master,表示本地的master分支。如下圖:


    可以想象,由于別人的工作,遠程倉庫中的master分支肯定會向前繼續移動,但是在下次聯網之前,該origin/master標記不會移動。而本地的master標記繼續向前移動。

    直到下次聯網,使用git fetch命令將遠程倉庫的內容取回本地,origin/master標記才會改變位置,這時,看起來就像是兩個分支,如下圖:

    最后,將origin/master分支合并到master分支中(使用get merge命令),本地代碼庫又一次變成了一個單一的master分支,繼續向前開發,并可以將它push到遠程倉庫,供別人使用。
      Git沖突的處理完全靠人工完成。(從邏輯上講,機器也不可能完美處理沖突。)比如一個小型團隊一起工作,他們可以設置一個服務器用于保存遠程Git倉庫,然后每個人工作之前先從該遠程倉庫fetch代碼,接著工作,工作完成后,先在本地提交,最后push到遠程倉庫。但是當一個人push的時候,已經有人在他之前push了,如果他們工作在同一個分支,就會出現沖突。解決沖突的辦法就是先把別人push的內容再次fetch下來,合并分支,然后再push。
      通過之前對git原理的了解,可以分析得出使用Git時有以下幾種工作流程:
      1.一個人單干,不需要考慮沖突,隨時可以開分支、合并分支和切換分支,隨時可以本地提交。如果為了防止代碼丟失,可以開一個服務器,每次工作完成就push到服務器上;
      2.小型團隊合作,如前所述,開一個服務器保存代碼倉庫,然后所有的人把該服務器當成遠程倉庫,工作之前先fetch,工作之后再push。如果有沖突,則先fetch,合并分支解決沖突后再push。如果團隊人數太多,每個人都向該服務器push,那沖突該是有多少?有可能一個開發者第一次向服務器push的時候,有人在他之前已經push過了,他只好先fetch,手工合并解決沖突,可等他再次push的時候,發現又有人再他之前已經push了,于是他只好再做一次解決沖突的流程,可是如果在他工作的時候,又有人push了呢?這也是之前講的該工作流程只適合小型開發團隊的原因。
      以上流程經過適當修改也可以供大型團隊使用,那就是將團隊分組,每個組的成員共用一個服務器當遠程倉庫,組長合并了該組的工作成果后,再push到另一個服務器當總的遠程倉庫,這樣就可以大大減少沖突的數量,減少工作量。
      3.開源項目的合作,在這種情況下,每個人都把自己的倉庫暴露在互聯網上。開源項目的組織者或負責人將所有人的倉庫設為遠程倉庫,并把有意義的工作合并到主分支,然后發布官方的Git倉庫。每個開發者從官方倉庫fetch代碼后,完成自己的工作,然后再把它push到互聯網上自己的倉庫,等著項目負責人將自己的工作整合到官方倉庫中。如果項目負責人不干了,改人了,只要還有人繼續開發,該項目就可以繼續下去。碰到團隊比較大的情況,也可以進行分組。
      服務器的建設也相當簡單,因為Git支持以SSH、HTTP等協議傳輸數據,如果需要對服務器有寫權限,就開通SSH服務吧,設一個賬戶供所有人訪問Git倉庫即可。如果只需要只讀權限,使用任何一個HTTP服務器均可。關于Git服務器的建設,請自行參考官方文檔。如果是個人的、開源的項目,可以使用Github網站提供的服務,直接存儲在互聯網上。(Github私人倉庫是要收錢的。)

    看來要把Git講清楚并不容易,用了這么多篇幅。下面把Git常用的命令回顧一下:
      git config 配置Git,一般使用不需要特別配置,但至少要設置開發者的名字和郵箱
      git init和git add 創建一個新倉庫,并跟蹤工作目錄下的文件
      git clone 從遠程克隆一個項目,包括工作目錄和倉庫
      git add 將修改后的文件放入緩存區域(staging area),或這表示沖突已經解決
      git status 顯示文件狀態,是已修改還是已緩存還是已提交
      git commit 提交項目
      git remote 管理遠程倉庫
      git fetch和git pull 從遠程倉庫抓取數據
      git push 向遠程倉庫推送數據
      git branch和git merge 創建分支及合并分支
      git checkout 切換分支

    git還有一個可視化工具gitk,使用它,可以以圖形化的方式查看提交的歷史、分支及合并分支等信息。下圖是我在springside4目錄下執行gitk的截圖:

    可以看到這里有一段復雜的開分支、合分支的記錄。

    這篇博文里沒有寫Maven、Git、Eclipse的安裝,因為在我的系統中只需要一個sudo apt-get install maven git eclipse就統統搞定,OpenJDK神馬的,作為依賴項當然是自動安裝了。對,你沒猜錯,我用的是Ubuntu。操作系統版本Ubuntu 13.10,maven 3.0.4、git 1.8.3.2、eclipse 3.8。同時給eclipse安裝上m2e及EGit插件。
    如果只是泛泛地寫Maven和Git的用法,那就不是我的風格了,下面當然是show圖片了。沒有寬屏顯示器的朋友們對不起了。不過可以通過Ctrl+鼠標滾輪將網頁縮小后查看。
    下圖,我的Ubuntu桌面:

    下圖,在虛擬控制臺(gnome-terminal)中使用簡潔而功能強大的上古神器Vim編輯器,配合半透明背景,酷斃了:

    下圖,我的工作界面,同時使用控制臺和Eclipse,方便高效:


    當在Eclipse中選擇新建項目的時候,可以選擇建立Maven項目或Maven模塊,如下圖:

    點下一步,可以看到讓選擇archetype,如下圖:


    再點下一步,發現要填寫的內容也不超過之前提到的知識范圍:


    點Finish,就可以完成一個Maven項目的創建。

    當然,也可以導入已有的Maven項目,如下圖:


    看看pom.xml配置文件的可視化編輯器,這也是我之前不講pom.xml配置語法的原因,如下圖:


    要運行Maven項目,請看Run As菜單:


    獲得一個用Git管理的項目也是有兩種途徑,一種為使用Eclipse的File->Import菜單,導入一個已經包含Git倉庫的項目;另一種方法就是為一個已存在的項目創建一個Git倉庫。
    用Import導入項目時,也可以從Github克隆。不過我的Egit插件似乎有點問題,使用插件自帶的搜索功能不能從Github上找到項目,但是直接指定URL可以。
    還是以SpringSide為例。選擇File->Import,彈出如下對話框,如下圖:

    但是在這里只能選擇Projects from Git,選擇下面的Repositories from GitHub是搜不到項目的。

    下一步,如下圖:


    選擇URI,繼續下一步,如下圖:


    輸入SpringSide4項目庫的地址。看清楚,是https協議哦。繼續下一步,如下圖:


    只有主分支可選,如果不是這樣,就選擇所有分支。然后下一步,如下圖:

    在這里需要強調一下,一定要選擇第三個:Import as general project。原因就是因為SpringSide的工作目錄內沒有Eclipse項目所需要的.project文件。如果是用Eclipse創建的項目,本身含有.project文件,就可以使用第一項:Import existing projects。好了,點Finish,springside項目成功導入。所有有關Git的操作都可以在快捷菜單的Team菜單項中找到,如下圖:


    如果選擇Show in history,就可以看到這樣的歷史記錄:


    從Github導入項目就展示到這里,其它的功能在IDE環境下大家自己慢慢摸索,應該是很簡單的。下面看看為一個已經存在的項目創建Git倉庫。

    如下圖,在maven-example項目的快捷菜單中選擇Team->Share project:


    彈出如下對話框:


    當然是選擇Git而不是CVS了。下一步,如下圖:
     
    到這里就要注意了,這個對話框中有一個Use or creat repository in parent folder of project的單選框,如果把鼠標放在上面,還有提示。提示說勾選這個單選框是不推薦的,因為會在Eclipse的工作目錄中創建Git倉庫。而在Eclipse工作目錄中創建Git倉庫可能會出某些問題。具體是什么問題,EGit User Guide里面有說明。

    為了方便起見,還是勾選這個單選框。勾選后,對話框變成下面這樣:


    點Create Repository后,點Finish就可以完成Git倉庫的創建了。

    創建Git倉庫后,項目中的文件還沒有被Git跟蹤,所以顯示的是問號標記,如下圖:


    點快捷菜單Team->Add to index后,文件加入追蹤,顯示的是+號標記,如下圖:


    提交工作的對話框,如下圖:


    提交后,項目中的文件標記如下圖:


      好了,就寫這么多吧。截圖也是一個很累人的工作。展示這么多圖片可不是為了取代官方教程,只是為了展示一下效果。讓大家知道這個IDE還是很好很強大的,最重要的是,工作界面是很漂亮的。

    重點補充:

      Git和Eclipse的EGit插件對于關鍵詞Repository的理解不一致,需要重點強調。在Git中,Repository的定義就是工作目錄下的.git目錄,工作目錄就是是一個Project的根目錄。Repository是工作目錄的子目錄。

      為了證明不是我對Repository理解錯誤,下面是《Pro Git》中的部分原文:

    Getting a Git Repository
     You can get a Git project using two main approaches. The first takes an existing project or directory and imports it into Git. The second clones an existing Git repository from another server.

    Initializing a Repository in an Existing Directory
     If you’re starting to track an existing project in Git
    , you need to go to the project’s directory and type
     $ git init
     This creates a new subdirectory named .git that contains all of your necessary repository files — a Git repository skeleton. 


      而Eclipse的EGit插件則不一樣。在Eclipse的世界里,Project是一個比較小的概念,而且不能嵌套,否則IDE會出問題,再加上Eclipse世界的觀點認為我們經常需要在一個workspace中開多個Project。所以Git中的working directory不是一個Project的工作目錄,而是一個workspace的工作目錄.而Project是workspace的子目錄,所以.git目錄不應該放到Project的根目錄下,而應該放到workspace的根目錄下。在workspace目錄下放一個.git目錄有很多好處,比如可以同時追蹤多個項目的源代碼,比如可以在刪除workspace時同時刪除.git目錄。但是在Eclipse遍歷workspace的時候,.git目錄的存在會不會出現問題還說不準。所以最好的辦法是把.git目錄、Project目錄放到workspace之外。如上所述,按Eclipse的哲學,.git目錄不應該是Project的子目錄,而是Project的平級目錄,那么當.git目錄和Project目錄都放到workspace之外的話,總得有一個目錄來存放它們吧,Eclipse就把這個存放它們的那個目錄叫Repository。其概念和Git中原有的Repository概念不一樣,Eclipse的Repository不是指.git目錄,而是Project目錄的父目錄,在Eclipse中,.git目錄叫metadata folder,如果和Git中的Repository是Project的子目錄的概念相比較,這兩個Repository的概念差了兩個輩份。

      如下圖,將Project納入Git管理,選擇快捷菜單Team->Share Project命令彈出的對話框:


      在這個對話框,有一個Use or create repository in parent folder of project的單選框,這里的repository就是指.git目錄的祖父目錄,所以選中這個單選框,則workspace就相當于是repository,而.git目錄就會放到Project目錄下。這和我們平時單獨使用Git的習慣是一致的,比較容易理解,但是卻是Eclipse不推薦的。

      按照Eclipse的哲學,我們應該點這個對話框中的Create按鈕,這樣會彈出如下對話框:


      按照我上面這么填寫后,相當于創建了一個Repository,其路徑為/home/youxia/git/examples,.git目錄就會創建在這個目錄下,Project目錄也會移動到這個目錄下,而workspace依然不變。點Finish,會返回上一個對話框,可以看到下面的表格中,顯示該項目的current location為/home/youxia/workspace/rcp-example,而創建Repository后,將會將該項目移動到/home/youxia/git/examples/rcp-example,.git目錄和rcp-example的項目目錄是平級的,都是examples的子目錄,examples就是Repository。而且使用這一個.git目錄,可以追蹤多個項目,也就是說,以后凡是我為了做示范寫的代碼,不管是swt-example也好,還是springside-example也好,都可以放到examples下,用這一個.git目錄保管他們的版本庫。


      為了證明我沒有誤解Eclipse的哲學,下面是EGit/User Guidehttp://wiki.eclipse.org/EGit/User_Guide)的部分原文:

    Eclipse Workspace and Repository working directory 
     Git Repositories can be created in different ways
    , for example by cloning from an existing Repository, by creating one from scratch, or by using the EGit Sharing wizard. 
     In any case (unless you create a 
    "bare" Repository, but that's not discussed here), the new Repository is essentially a folder on the local hard disk which contains the "working directory" and the metadata folder. The metadata folder is a dedicated child folder named ".git" and often referred to as ".git-folder". It contains the actual repository (i.e. the Commits, the References, the logs and such). 
     The metadata folder is totally transparent to the Git client
    , while the working directory is used to expose the currently checked out Repository content as files for tools and editors. 

      另一段,關于.git目錄不應該放到Project目錄下,而應該和Project目錄平級,并放到workspace之外的:

    It is probably not a good idea to make a project the root folder of your Repository 
     The reason is that you will never be able to add another project to this Repository
    , as the .project file will occupy the root folder; you could still add projects as sub-folders, but this kind of project nesting is known to cause lots of problems all over the place. In order to add another project, you would have to move the project to a sub-folder in the Repository and add the second project as another sub-folder before you could commit this change.  
    It is a good idea to keep your Repository outside of your Eclipse Workspace 
     There are several reasons for this: The new Repository will consider the complete folder structure of the Eclipse workspace as (potential) content. This can result in performance issues
    , for example when calculating the changes before committing (which will scan the complete .metadata folder, for example); more often than not, the workspace will contain dead folders (e.g. deleted projects) which semantically are not relevant for EGit but can not be excluded easily. 
     The metadata (.git-) folder will be a child of the Eclipse Workspace. It is unclear whether this might cause unwanted folder traversals by Eclipse. 
     You can easily destroy your Repository by destroying your Eclipse Workspace 


      這里面的細微差別可能會在使用EGit的過程中產生極大困惑。我將其作為重要內容補充道博文末尾,希望能對大家有所幫助。


    評論

    # re: 淺論Maven和Git的原理及展示其與Eclipse的集成  回復  更多評論   

    2013-12-30 11:43 by Sha Jiang
    現在不是流行用Gradle了嘛,嘿嘿

    # re: 淺論Maven和Git的原理及展示其與Eclipse的集成[未登錄]  回復  更多評論   

    2013-12-30 12:34 by 海邊沫沫
    @Sha Jiang
    多謝指點。又讓我學到新東西了。

    # re: 淺論Maven和Git的原理及展示其與Eclipse的集成  回復  更多評論   

    2013-12-30 13:46 by 干眼
    現在還是JAVA用的比較多吧,我們老師都是這么說的。

    # re: 淺論Maven和Git的原理及展示其與Eclipse的集成  回復  更多評論   

    2013-12-30 15:38 by 鵬達鎖業
    對大部分人來說,使用插件非常簡單

    # re: 淺論Maven和Git的原理及展示其與Eclipse的集成  回復  更多評論   

    2013-12-31 10:51 by 鵬達鎖業
    這片神秘土地形形色色的人以及他們不為人知的生活方式

    # re: 淺論Maven和Git的原理及展示其與Eclipse的集成[未登錄]  回復  更多評論   

    2013-12-31 11:12 by 海邊沫沫
    @鵬達鎖業
      --------------------------
      這片神秘土地形形色色的人以及他們不為人知的生活方式
      --------------------------

    What?

    # re: 淺論Maven和Git的原理及展示其與Eclipse的集成[未登錄]  回復  更多評論   

    2013-12-31 12:06 by landon
    ant+ivy 可否一戰?

    # re: 淺論Maven和Git的原理及展示其與Eclipse的集成  回復  更多評論   

    2014-01-01 12:16 by 私人訂制
    一直用不習慣GIT的飄過 哈哈

    # re: 淺論Maven和Git的原理及展示其與Eclipse的集成  回復  更多評論   

    2015-08-22 10:12 by zuidaima
    可以參考最新的文檔:
    如何在eclipse jee中檢出項目并轉換為Maven project,最后轉換為Dynamic web project,地址:http://zuidaima.com/blog/1618180875144192.htm
    如何在eclipse jee中創建Maven project并且轉換為Dynamic web project
    地址:http://zuidaima.com/blog/1618162161323008.htm

    # re: 淺論Maven和Git的原理及展示其與Eclipse的集成  回復  更多評論   

    2015-11-27 13:44 by laowang
    就是單純的表示下 感謝! 入門階段看了很多介紹 從你這里收貨最大!多謝!
    主站蜘蛛池模板: 亚洲人成电影在在线观看网色| 中文亚洲AV片不卡在线观看| 亚洲精品成人久久| 无码一区二区三区免费| 久久99久久成人免费播放| 免费观看国产精品| 色多多www视频在线观看免费| 免费大学生国产在线观看p| 国产亚洲综合视频| 亚洲国产专区一区| 两个人看www免费视频| 成人免费视频国产| 日韩精品亚洲人成在线观看| 久久香蕉国产线看免费| 亚洲精品国产成人99久久| 99视频在线免费| 久久精品九九亚洲精品天堂| 你懂得的在线观看免费视频| 亚洲人成网站影音先锋播放| 2021免费日韩视频网| 亚洲乱妇老熟女爽到高潮的片| 91在线手机精品免费观看| 亚洲国产精品网站久久| 久久精品a一国产成人免费网站| 亚洲人成网站免费播放| 亚洲第一福利网站在线观看| 中文字幕av免费专区| 亚洲美女视频网址| 女人18毛片特级一级免费视频| 免费人成动漫在线播放r18 | 女人张开腿等男人桶免费视频| 亚洲AV无码男人的天堂| 亚洲免费无码在线| 99在线观看免费视频| 亚洲乱码日产精品一二三| 亚洲人成电影在线播放| 久久精品国产免费观看三人同眠| 精品久久久久久亚洲中文字幕| 国产AV无码专区亚洲Av| 日韩电影免费在线观看视频| a级毛片毛片免费观看永久|