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

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

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

    京山游俠

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

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

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

    Maven關(guān)鍵詞:convention; phase; archetype; groupId; artifactId; plugin; task; dependency; repository

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

      再以SpringSide4為例。先從Github上將SpringSide4克隆下來。(稍后會講到Git)命令如下:
    git clone https://github.com/springside/springside4.git
      進入springside4目錄,可以看到里面有三個主要的目錄,分別為examples、modules、supports。進入到modules目錄,運行mvn install就可以將SpringSide4安裝到本地倉庫了,就這么簡單。不過,這個操作要花的時間比較長,因為需要下載很多依賴的庫。
      安裝好SpringSide4后,要創(chuàng)建基于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時代。

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

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



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



    主分支也可以向前發(fā)展,如下:



    最終,當(dāng)新分支代碼很穩(wěn)定以后,可以將其合并到主分支,如下圖:



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


    可以想象,由于別人的工作,遠程倉庫中的master分支肯定會向前繼續(xù)移動,但是在下次聯(lián)網(wǎng)之前,該origin/master標(biāo)記不會移動。而本地的master標(biāo)記繼續(xù)向前移動。

    直到下次聯(lián)網(wǎng),使用git fetch命令將遠程倉庫的內(nèi)容取回本地,origin/master標(biāo)記才會改變位置,這時,看起來就像是兩個分支,如下圖:

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

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

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

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

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

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

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


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

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


    再點下一步,發(fā)現(xiàn)要填寫的內(nèi)容也不超過之前提到的知識范圍:


    點Finish,就可以完成一個Maven項目的創(chuàng)建。

    當(dāng)然,也可以導(dǎo)入已有的Maven項目,如下圖:


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


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


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

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

    下一步,如下圖:


    選擇URI,繼續(xù)下一步,如下圖:


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


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

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


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


    從Github導(dǎo)入項目就展示到這里,其它的功能在IDE環(huán)境下大家自己慢慢摸索,應(yīng)該是很簡單的。下面看看為一個已經(jīng)存在的項目創(chuàng)建Git倉庫。

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


    彈出如下對話框:


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

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


    點Create Repository后,點Finish就可以完成Git倉庫的創(chuàng)建了。

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


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


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


    提交后,項目中的文件標(biāo)記如下圖:


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

    重點補充:

      Git和Eclipse的EGit插件對于關(guān)鍵詞Repository的理解不一致,需要重點強調(diào)。在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世界的觀點認為我們經(jīng)常需要在一個workspace中開多個Project。所以Git中的working directory不是一個Project的工作目錄,而是一個workspace的工作目錄.而Project是workspace的子目錄,所以.git目錄不應(yīng)該放到Project的根目錄下,而應(yīng)該放到workspace的根目錄下。在workspace目錄下放一個.git目錄有很多好處,比如可以同時追蹤多個項目的源代碼,比如可以在刪除workspace時同時刪除.git目錄。但是在Eclipse遍歷workspace的時候,.git目錄的存在會不會出現(xiàn)問題還說不準。所以最好的辦法是把.git目錄、Project目錄放到workspace之外。如上所述,按Eclipse的哲學(xué),.git目錄不應(yīng)該是Project的子目錄,而是Project的平級目錄,那么當(dāng).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就相當(dāng)于是repository,而.git目錄就會放到Project目錄下。這和我們平時單獨使用Git的習(xí)慣是一致的,比較容易理解,但是卻是Eclipse不推薦的。

      按照Eclipse的哲學(xué),我們應(yīng)該點這個對話框中的Create按鈕,這樣會彈出如下對話框:


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


      為了證明我沒有誤解Eclipse的哲學(xué),下面是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. 

      另一段,關(guān)于.git目錄不應(yīng)該放到Project目錄下,而應(yīng)該和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的過程中產(chǎn)生極大困惑。我將其作為重要內(nèi)容補充道博文末尾,希望能對大家有所幫助。


    評論

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

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

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

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

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

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

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

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

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

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

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

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

    What?

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

    2013-12-31 12:06 by landon
    ant+ivy 可否一戰(zhàn)?

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

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

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

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

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

    2015-11-27 13:44 by laowang
    就是單純的表示下 感謝! 入門階段看了很多介紹 從你這里收貨最大!多謝!
    主站蜘蛛池模板: 亚洲第一成年免费网站| 亚洲春色在线观看| 毛片a级三毛片免费播放| 中文毛片无遮挡高清免费| 亚洲AV无码XXX麻豆艾秋| 亚洲美女视频一区| 亚洲成a人片在线观看日本| 亚洲成a人片在线观看国产| 成人奭片免费观看| 亚洲国产精品免费在线观看| 成人网站免费大全日韩国产 | 中文字幕视频免费在线观看| 亚洲AV无码专区在线厂| 亚洲一区中文字幕在线电影网| 久久亚洲国产精品五月天| 亚洲一区二区精品视频| 国产高清免费的视频| 免费人成视频在线| 国产成人免费在线| 222www免费视频| 免费看又黄又无码的网站| 精品国产免费一区二区三区香蕉| 一级黄色免费大片| 四虎影视永久在线精品免费| 久久久久久亚洲精品无码| 亚洲av片在线观看| 亚洲AV无码国产一区二区三区| 亚洲日日做天天做日日谢| 亚洲中文字幕人成乱码| 亚洲中文字幕无码av在线| 亚洲中字慕日产2020| 亚洲熟妇丰满xxxxx| 亚洲色大成网站www久久九| 亚洲精品无码成人片久久不卡| 伊人久久五月丁香综合中文亚洲| 亚洲精品免费网站| 亚洲免费综合色在线视频| 337P日本欧洲亚洲大胆艺术图| 黄色免费在线网址| 精品一区二区三区免费观看| 国产中文字幕在线免费观看|