2016年7月23日 星期六

安裝、設定、觀念 (Maven 1)

Maven官網


按下右邊的超連結


左邊的光標會變成在Index(category),可以選這兩個超連結來學習,以5分鐘的為例


可以看到一定要有java,然後下載maven(我下的是3.3.9),maven會找叫「JAVE_HOME」的環境變數,所以
JAVA_HOME設定成如「C:\Program Files\Java\jdk1.8.0_73」,依自己的版本決定
然後,在PATH後面加上「;%JAVA_HOME%\bin」,這樣子不管到哪個目錄才能執行bin裡的程式
然後maven也是類似上面的設定,假設叫MAVEN,路徑指到bin路徑,如「C:\Users\javaBruce\Downloads\apache-maven-3.3.9\bin」
最後再PATH後面加上「;%MAVEN%」

設定完後,就可以在命令提示字元打mvn --version,其他命令打mvn -h

橘框的超連結有說執行命令後,Windows會在${user.home}/.m2/repository/變成maven的local repository
想改的話,要設定settings.xml,可看官網
裡面有說
設定所有使用者的路徑: ${maven.home}/conf/settings.xml
設定當前使用者的路徑: ${user.home}/.m2/settings.xml(要從上面的路徑複製)
如果兩個都有會合併,而內容一樣的會以使用者的為主

第一個綠框我是自己設定,首先我在C:\Users\javaBruce\Downloads建立一個資料夾叫「Maven_Test」,然後命令提示字切換到Maven_Test,然後下

>cd Downloads\Maven_Test
>mvn archetype:generate

一按下去.m2會建立,會跑一段時間,然後出現如下的畫面


810這個數字表示它想幫你下載數字810的架構,但我的緩衝區太小看不到了,所以可以打第一個紅框搜尋,然會發現只找到1個,一般有兩個較重要的目錄,如下:
maven-archetype-quickstart:JAVA SE用這個
maven-archetype-webapp:JAVA EE用這個

第二個紅框左邊有一個1表示他想幫我們下數字1的架構(前面的1628個已經不算了),可以直接按Enter或打1都可以,然後版本通常都選最新的

然後groupId、artifaceId、version三個加起來是唯一的,先亂打看看待會出現什麼
package是java的套件名,最後會問你要不要執行

完成後如下圖

因為tree這個指令看不到檔案,所以我用紅字標出來
和src同層有一個檔案pom.xml是設定檔,很重要
其他兩個檔案是讓我們測試用的java檔和測試檔

架構還有很多沒有列出來

一樣是剛剛的網頁,圖和我的是一樣的,紅框裡面有列出標準的專案架構
通常開發還會用到resources這個目錄,通常放多國語言properties和xml的設定檔,有需要就自己新增了

現在要執行App.java裡的Hello World!,一些指令不知道沒關係,待會會講解
>cd ccc.ddd
>mvn package-->會build success,也會在pom.xml的同一層產生target目錄,而且裡面有jar檔
然後使用java指令執行jar裡的class
>java -cp target\ccc.ddd-1.0.jar eee.fff.App

執行mvn clean會將target整個目錄清掉

※以上會發現jar的名稱是${artifactId}-${version},副檔名是pom.xml裡packaging設定的

※groupId目前還看不出來

※artifactId雖然我用ccc.ddd,但整個是一個資料夾名稱


觀念:




這裡有說有三個內建的Build Lifecycle(這個專有名詞不要翻譯,越翻越不懂)
default佈署用,如剛剛的mvn package
clean清除用,剛剛一下這個命令,target就不見了
site下載文件用,如果下mvn site,會在target裡新增一個資料就叫site,裡面是文件

往下找到Lifecycle Reference,標題會發現
clean lifecycle有3個
default lifecycle有23個
site lifecycle有4個

這些(30個)官方的名詞叫phases,用在官方的命令,下面還會講goals


文件有說會按順序由上往下執行到你下的指令為止,
所以mvn clean這個指令會執行pre-clean和clean
而mvn package會執行validate、initialize一直到package

但要注要下面還有個Built-in Lifecycle Bindings,它說pom.xml的packaging不一樣也會有所不同,預設是jar,所以以我這個例子如下圖

本來有23個,因為是jar的關係,所以會變成8個,一樣由上往下執行
右邊的xxx:xxx官方的名詞叫goals,一個phase由很多個goals組成的


幾個較重要的phases:
一樣由上往下寫
clean:清除target
compile:編譯成class
test:測試src\test\java裡的程式,所以就算沒有target資料夾也可以測試
package:產生pom.xml裡的packaging指定的副檔名,如jar
install:將產生的檔案,例如jar放到local repository(.m2),是從groupId開始放的,如aaa\bbb\ccc.ddd\1.0,jar檔會放在1.0資料夾裡
deploy:將產生的檔案放在remote repository (目前的設定還不行用,還得有大量的設定)

沒有留言:

張貼留言