java build tool course in 2011

112
Java Build Tools Java Build Tools Ant & Maven Ant & Maven 2011, qrtt1 2011, qrtt1

Upload: ching-yi-chan

Post on 26-Aug-2014

641 views

Category:

Self Improvement


6 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Java Build Tool course in 2011

Java Build ToolsJava Build ToolsAnt & MavenAnt & Maven

2011, qrtt12011, qrtt1

Page 2: Java Build Tool course in 2011

軟體開發

開發者

進行程式寫作

利用 IDE 或呼叫 Java Compiler 進行編譯

Page 3: Java Build Tool course in 2011

關於軟體開發

• Top Down 由上至下的開發模式– 先定義總體流程及主要類別

– 各流程的接合界面有哪些

– 模擬整合後的運作情形

– 由整體需求出發,較不會開發出多餘的功能。

• Bottom Up 由下至上的開發模式– 先實作可能需要用到的元件

– 依功能模組責任分工

– 最後試著整合看看

– 以功能導向出發,較易開發出精緻的功能。

Page 4: Java Build Tool course in 2011

關於軟體開發

• Top Down 由上至下的開發模式較適用於專案開發。對專案來說最容易拖延進度是在最後整合的階段, Top Down 的模式,使得整合的模型在最初就形成,並且能利用持續性整合的方式,針對每一批新增的功能做總體的測試,對需求而變更實作的彈性較高。

• Bottom Up 由下至上的開發模式較適於獨立的公用程式。此種開發模式優點在於針對特定功能定義明確,往往能發展出較精確的測試案例。

• 無論專案以何種模式進行,測試案例與測試工具的使用都能輔助您提昇開發品質。

Page 5: Java Build Tool course in 2011

關於程式編譯

• 使用 IDE 編譯程式– 便利性佳,有顯眼的錯誤、警告提醒

– 即使方便,但無法進行自動化編譯

• 手動呼叫 Java Compiler – 使用上較為不便

– 手工處理 CLASSPATH 較易出錯

– 實務上會寫成 Script• Linux : Shell Script• Windows : .BAT

Page 6: Java Build Tool course in 2011

Build Tool

Developer OR Build Server

check out

build

document

library

application

auto testing

Build Tool

Version Control

commit

Page 7: Java Build Tool course in 2011

Build Tool

• 建構工具– 對每一個軟體專案來說,我們期待不管歷經多久,轉換過哪些

開發者。最新一批的維護者,將原始碼由版本控制系統取提出來後,有辦法輕鬆地建構它。

Page 8: Java Build Tool course in 2011

Build Tool

• 建構工具– 以事先準備的編譯腳本編譯

– 編譯條件、參數保存於檔案,即使換人來做也能有一致的結果

– Ant 與 Maven 是 Java 軟體開發最常用的 Build Tool

Page 9: Java Build Tool course in 2011

Ant

• Apache Ant– http://ant.apache.org

– Java 專案中最廣泛使用的建構工具

– 能透過簡單的 XML 撰寫編譯腳本

Page 10: Java Build Tool course in 2011

Why Ant

• 因 JVM 在各平台的普及性, Java 開發者選擇的開發平台也顯得多元化。既有的 build tool 多為各平台相依的:– Linux 平台以 GNU Make 為大宗

– Windows 平台以 NMake 等 Windows SDK 提供的工具為大宗

• 除工具的不同,還得考慮平台差異– CLASSPATH 分隔字元:

• Windows 『 ; 』

• Linux 『 : 』

– Shell/DOS 指令差異• 刪除檔案 rm del

• Write once, run anywhere JVM + Bytecode– 若是沒有替 Java 設計統一的編譯工具,編譯的流程難以達到

『一寫通用』

Page 11: Java Build Tool course in 2011

Ant 的設計哲學

• 提供一個可移植性高的編譯與部署工具– 設計必需簡單易學

• Ant 的核心模型概念只有三個:專案、執行目標、任務

– 使用者能輕易讀懂編譯腳本• Ant 使用已廣為人知道 XML 作為腳本語言

– 工具必需能夠讓使用者擴充• Ant 提供擴充 API 讓進階使用者能擴充新功能

Page 12: Java Build Tool course in 2011

Ant build file = 1 個專案的 Build Script

<project>

<target 1>

<target 2>

<target N>

Task

Task

Task

Task

Task

Task

Page 13: Java Build Tool course in 2011

Ant 的學習技巧

• Ant 是一個指令工具– 初學時,多瀏覽 Ant 手冊與常用 Task

• http://ant.apache.org/manual/

– 將常用的指令參數,使用慣例寫成 CheatSheet (小抄 )– 蒐集工作上常用的 Task 範例

• <javac>• <jar>• <ftp>• <cvs>

– 使用 IDE 輔助學習• Eclipse 或 NetBeans 都能加速您編寫 Build Script 的時間

Page 14: Java Build Tool course in 2011

Ant 手冊導覽

各類 Ant Tasks

Page 15: Java Build Tool course in 2011

Ant 手冊導覽

編譯用的相關 Task,其中 Javac 是我們最常用的

Page 16: Java Build Tool course in 2011

Ant 手冊導覽

每一個 Task 進去都會有詳細的說明

Page 17: Java Build Tool course in 2011

Ant 手冊導覽

• Task 說明頁也包含完整的參數列表、是否為必要項目、預設值是什麼

Page 18: Java Build Tool course in 2011

Ant 手冊導覽

• 多數的 Task 會包含使用範例。這是我們使用、學習 Task 用法的重要參考資料:

Page 19: Java Build Tool course in 2011

Ant In Daily

• AntInDaily 專案的主要功能為 ConfigurationManager 。這是許多專案開發時都會提供的類別,功能只有負責讀入設定檔,並將它轉成物件。

Page 20: Java Build Tool course in 2011

Ant In Daily

• ConfigurationManager 會讀入 config.properties ,並提供 getDatabaseInfo() 方法,將部分的參數集合成 DatabaseInfo 物件。

Page 21: Java Build Tool course in 2011

Ant In Daily

• 專案內有個 config 目錄,並且包含二個子目錄– dev

– prod

• 我們期望一般開發時,程式編譯是使用 dev 目錄內的設定檔;當要編譯正式環境版本時,要改用 prod 目錄的設定檔

Page 22: Java Build Tool course in 2011

Ant In Daily

• IDE 能輔助開發,並且在程式語法完整、正確時,替您編譯出最新的 .class 檔。

Page 23: Java Build Tool course in 2011

Ant In Daily

• IDE 難以切換不同情境的編譯:– 正式環境版本

– 開發環境版本

• 依賴『手工』容易出錯– 複製檔案

– 改寫設定檔

• 『在我的電腦上,跑起來沒問題啊!』

• 『一定是你的電腦怪怪的!』正式版

開發版

Page 24: Java Build Tool course in 2011

Ant In Daily

• IDE 難以選用不同的 Library 版本– 依賴人工操作 UI 來替換不同的 Library

– 使用 Ant 能透過參數化,在編譯時決定要使用的版本。

• 在某些情況,我們希望使用完全不同的版本進行編譯,並且打包成一個 Fat JAR

Page 25: Java Build Tool course in 2011

撰寫 Ant Build Script In Eclipse

• 工欲善其事,必先利其器– 熟悉 Eclipse 撰碼提示功能

– 熟悉 Ant Editor 的提示

• 學習目標:– 正式進入 Ant In Daily 實作前,以利用一個較簡單的

MyProject 從無到有寫出 Ant Build Script– 熟悉 Ant 手冊的形式,加速對手冊的閱讀及範例使用

Page 26: Java Build Tool course in 2011

撰寫 Build Script for Ant

• 新增 build.xml– Ant 預設的 Script File 名稱為 build.xml

– Eclipse 開啟 build.xml 時,會自動選用 Ant Script Editor– 使用撰碼提示功能,快速產生 Build Script 樣版

Page 27: Java Build Tool course in 2011

撰寫 Build Script for Ant

• 要使用撰碼提示 (Content Assist)功能,您可以:– Edit 功能表 Content Assist

– 使用熱鍵 Alt + /

• 右邊的圖例,撰碼提示的熱鍵顯示為 Ctrl + Space 。這是正確的,因為 Eclipse 同一個功能可能有多組設定,而 Ctrl + Space 恰為開啟中文輸入法的熱鍵,我們只能改用 Alt + / (或自定不同的組合 )

Page 28: Java Build Tool course in 2011

撰寫 Build Script for Ant

Page 29: Java Build Tool course in 2011

撰寫 Build Script for Ant

將樣本多餘的部分刪除,留下一個 <target>

輸入 <jav 並使用撰碼提示

Page 30: Java Build Tool course in 2011

撰寫 Build Script for Ant

<javac>

• 我們即將使用 <javac> 編譯專案,但是該如何使用呢?– 參考手冊的範例

<javac srcdir="src" destdir="build" />

Page 31: Java Build Tool course in 2011

撰寫 Build Script for Ant

Run Ant Script from Eclipse

• 在 build.xml 開啟右鍵選單,執行 Run Ant Build

C:\workspace2\MyProject\build.xml:8: destination directory "C:\workspace2\MyProject\build" does not exist or is not a directory

Page 32: Java Build Tool course in 2011

撰寫 Build Script for Ant

<mkdir>

• 使用 <mkdir> 建立缺少的 build 目錄

Page 33: Java Build Tool course in 2011

撰寫 Build Script for Ant

<mkdir>

Page 34: Java Build Tool course in 2011

Build Process

• 到目前為止,已經撰寫出將 src 資料夾內的原始碼編譯的 Ant Script :

• 思考: IDE 除了編譯 .java ,還做了些什麼?

• 接下來,我們打算讓 Ant 替我們做些什麼?

<?xml version="1.0" encoding="UTF-8"?><project name="my_project" default="package"> <description> 練習使用 Ant 編譯我的專案 </description>

<target name="package" description="packaging my project"> <mkdir dir="build"/> <javac srcdir="src" destdir="build" /> </target></project>

Page 35: Java Build Tool course in 2011

Prepare Environment

Compile Source Code

Copy Resources

Prepare Test Environment

Compile Test Source Code

Copy Test Resources

Generate Document Generate Report

Generate Library

Release Library

Deploy Library

Execute App

Build Process

Page 36: Java Build Tool course in 2011

Prepare Environment

Compile Source Code

Copy Resources

Prepare Test Environment

Compile Test Source Code

Copy Test Resources

Generate Document Generate Report

Generate Library

Release Library

Deploy Library

Execute App

Build Processmkdir

copy

javac

mkdir

copy

javac

junitjavadoc

jar war

ftp

ftp copy

java exec

Page 37: Java Build Tool course in 2011

Script For AntInDaily

• 觀察看看:– 有哪些 XML Tag 或 Attribute 是新出現的呢?

Page 38: Java Build Tool course in 2011

Script For AntInDaily

• 參數獨立於設定檔

Page 39: Java Build Tool course in 2011

Script For AntInDaily

prepare compile package clean

default

Page 40: Java Build Tool course in 2011

Script For AntInDaily

• Prepare– 建立編譯時所需的目錄

– 複製需要的檔案,並依情況選用 dev/prod 的設定檔

<target name="prepare" depends="clean"> <mkdir dir="${build.dir}" /> <mkdir dir="${dist.dir}" /> <copy todir="${build.dir}"> <fileset dir="${src.dir}"> <include name="**/*.properties" /> </fileset> </copy> <copy todir="${build.dir}" overwrite="true"> <fileset dir="${config.dir}"> <include name="**/*.properties" /> </fileset> </copy></target>

Page 41: Java Build Tool course in 2011

Script For AntInDaily

• Compile– 編譯原始碼

• Ant 是專為 java 專案設計的,處理 CLASSPATH 相當便利

<target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${build.dir}"> <classpath refid="classpath" /> </javac></target>

Page 42: Java Build Tool course in 2011

Script For AntInDaily

• Package– 打包成 JAR

<target name="package" depends="compile"> <jar destfile="${dist.dir}/${library.name}"> <fileset dir="${build.dir}"> <include name="**/*.*" /> </fileset> </jar></target>

Page 43: Java Build Tool course in 2011

Script For AntInDaily

• Clean– 清除編譯的目錄

• 清除的動作是重要的,這樣可以保證每一次的結果是最正確的。不會只有部分重新編譯而產生難以理解的結果。

<target name="clean"> <delete dir="${build.dir}" /></target>

Page 44: Java Build Tool course in 2011

Ant – Property & DataType

• Project 、 Target 、 Task 是撰寫 Ant Script 的重要成份。

• Property 與 DataType 則是 Ant 重要的基礎設施,如同一個程式語言要有內建類別一樣。

Page 45: Java Build Tool course in 2011

Ant – Property

• Property– 透過 property 將參數轉換成變數,這使得您的專案更加有彈

性。

– 它也能透過在參數列指定• ant -Dfoo.library=my_foo_library.jar

Page 46: Java Build Tool course in 2011

Ant - DataType

• 語法與型別是程式語言的基礎,而 Ant 提供了我們一些基本的型別,讓我們處理編譯工作最常需要面對的– 路徑

– 檔案列表

• 複製 <copy> 免不了得處理路徑與檔案

• 編譯 <javac> 需要的 classpath 免不了得處理路徑與檔案

• 執行 <java> 需要的 classpath 免不了得處理路徑與檔案

• 打包 <jar> 也許需知道哪些檔案該包進去

Page 47: Java Build Tool course in 2011

<fileset>

• 手冊– http://ant.apache.org/manual/Types/fileset.html

Page 48: Java Build Tool course in 2011

<fileset>

<copy todir="${build.dir}"> <fileset dir="${src.dir}"> <include name="**/*.properties" /> </fileset></copy>

<jar destfile="${dist.dir}/${library.name}"> <fileset dir="${build.dir}"> <include name="**/*.*" /> </fileset></jar>

Page 49: Java Build Tool course in 2011

<fileset> 與 CLASSPATH

<path id="classpath"> <fileset dir="${lib.dir}"> <include name="**/*.jar" /> </fileset></path>

<javac srcdir="${src.dir}" destdir="${build.dir}"> <classpath refid="classpath" /></javac>

思考:若是在命令列下自己打 javac –cp .;Foo.jar;Bar.jar .. 是多麼繁複呢?

Page 50: Java Build Tool course in 2011

• 實作目標:完成 AntInDaily 的 build.xml

• 實作摘要:– 完成 build.xml 的 path reference 定義

– 完成 <javac> 內 classpath 引用上一步定義的 path reference

• 環境準備– 請匯入 Lab1

• 本教材假設您已在操作環境將 JDK 6.0 含以上版本安裝完畢

Lab 1 撰寫 AntInDaily 的 build.xml

Page 51: Java Build Tool course in 2011

Lab 1 撰寫 AntInDaily 的 build.xml

• 當您開啟 build.xml 會看到定義專案的 classpath 部分是被註解的,請使用 <fileset> 選用在 ${lib.dir} 內的 JARs

Page 52: Java Build Tool course in 2011

Lab 1 撰寫 AntInDaily 的 build.xml

• 接著,您必需在 <javac> 內使用 <classpath> 標籤,並使用先前定義的 path reference :

Page 53: Java Build Tool course in 2011

擴充 Ant

• Ant 替使用者預先準備日常開發工作所需的 Task 。您仍可以另外下載額外的 Library 來擴充 Ant 的功能。

• Ant 有提供一組擴充 Task 的 API ,所以加入新的 Task 就如同在 IDE 增加新的 Plugin 一般,使用 taskdef 標籤,宣告新的 Task 與它的 classpath :

<taskdef resource="some_resource_file_in_3rd_tasks.properties" classpath="/path/to/other_3rd_task.jar"/>

Page 54: Java Build Tool course in 2011

擴充 Ant

• 關於 taskdef 的自動的 classpath ,您可以將 JAR 放在– ${user.home}/.ant/lib

– ${ant.home}/lib

• 也許有人會想要加在 CLASSPATH 環境變數,但這通常是錯誤的開始。 Ant 建議您使用上述的位置放置 JARs ,或著將 JAR 跟著專案走,採用在專案內自訂的 classpath (如同 javac 那樣 )

<taskdef resource="some_resource_file_in_3rd_tasks.properties">

Page 55: Java Build Tool course in 2011

擴充 Ant

• CheckStyle 是一套程式碼靜態分析工具,它主要的功能是輔助開發者,撰寫程式碼儘可能合乎建議的慣例。

• 利用 CheckStyle 工具提供的 Ant Task ,我們能輕鬆地在 Build Process 順便回報目前專案程式碼的分析結果:

Page 56: Java Build Tool course in 2011

Lab 2 替 Ant 新增 CheckStyle Task

• 實作目標:增加 CheckStyle Task

• 實作摘要:– 建立新的 path reference 指向 CheckStyle JAR

– 建立 check Target 它會執行 CheckStyle

– 在 check Target 內宣告 CheckStyle Task

– 使用 <checkstyle> Task 對專案原始碼資料夾進行分析

• 檔案– 請匯入 Lab2

Page 57: Java Build Tool course in 2011

• Lab2 多出 lib.build 資料夾,將只有 Build Tool 會使用到的 JARs 與相關設定檔獨立放置是個好習慣。

• 請建立一個新的 path reference 名為 classpath.build 指到這個目錄

Lab 2 替 Ant 新增 CheckStyle Task

Page 58: Java Build Tool course in 2011

• 使用 <path> 標籤建立 path reference

• 同樣的,保持將實際的目錄參數化的好習慣。

Lab 2 替 Ant 新增 CheckStyle Task

Page 59: Java Build Tool course in 2011

• 建立 check Target

宣告 checkstyle Task,並使用先前建好的 path reference

呼叫 <checkstyle> 分析現有的原始碼目錄

Lab 2 替 Ant 新增 CheckStyle Task

Page 60: Java Build Tool course in 2011

在 IDE 外執行 Ant

• 透過 IDE 學習 Ant Script 的撰寫是相當方便的。對於軟體開發者來說,讓工作更加自動化也是重要的。當您學會在 IDE 之外使用 Ant 時,它能帶給您更多的便利。

• 執行 Ant 的方法:– IDE

• Run As Ant Build• Click Ant View Button

– 命令列

Page 61: Java Build Tool course in 2011

在 IDE 外執行 Ant

• 安裝 Ant 命令列工具– 將在 Ant 官網下載回來的壓縮檔解壓縮:

• Ex. C:\app\apache-ant-1.8.2

– 設定環境變數• ANT_HOME= C:\app\apache-ant-1.8.2• 並在 PATH 變數再加上 %ANT_HOME%\bin

Page 62: Java Build Tool course in 2011

在 IDE 外執行 Ant

• 開啟命令列,測試 Ant 安裝是否正確

Page 63: Java Build Tool course in 2011

在 IDE 外執行 Ant

• 您可以試著使用 Ant 編譯,先前在 IDE 編譯的專案:

Page 64: Java Build Tool course in 2011

在 IDE 外執行 Ant

• 當您在 IDE 內寫完 Ant Build Script 後,除了在 IDE 上測試,強烈建議您也使用外部的 Ant 程式執行看看。

• IDE 附的 Ant 版本往往比您後來下載的『舊』,多一份用心,稍為測試一下。

Page 65: Java Build Tool course in 2011

在 IDE 外執行 Ant

• 當 Ant 能在 IDE 外執行後,我們還可以:– 使用 Ant 來執行 Java 程式

• 利用 Ant 的功能,簡單處理 CLASSPATH

– 使用 Ant 來輔助其他任務• 在 Linux 下有方便的 Shell Script 。 Windows 的 .Bat 相較之下

是較陽春的。

• 將複雜的功能交給 Ant , .Bat 只要負責喚起 Ant Script 就行了

– <cvs>– <ftp>– <ssh>

• .Bat 配合 Windows 排程即可完成週期性任務

Page 66: Java Build Tool course in 2011

Maven

• Maven 的設計哲學:

使用慣例優先於組態設定

• Ant 沒有使用慣例的設計:任何專案都能由無到有地寫出 Build Script 。使用上極為彈性,能做出 Build Tool 之外的應用。

Page 67: Java Build Tool course in 2011

Maven

• 專案結構上的慣例– ${basedir}

• src– main

» java» resource

– test» java» resource

• target– classes

Page 68: Java Build Tool course in 2011

Maven

• 操作介面的慣例

• 透過指定 Build Phase 名稱來完成工作:– install– package– test– deploy– site

• Ant 則提供給開發者彈性,自由選擇 Target 名稱。

Page 69: Java Build Tool course in 2011

Maven

• 建構流程上的慣例– Maven 有固定的 Build lifecycle 。

• 表格為 Default Build Lifecycle 包含的Phase– 當執行 mvn package 時, mvn 會由

package 所屬的 Lifecycle ,由第一個 Phase依序執行到 package

validate

initialize

generate-sources

process-sources

generate-resources

process-resources

compile

process-classes

generate-test-sources

process-test-sources

generate-test-resources

process-test-resources

test-compile

process-test-classes

test

prepare-package

package

pre-integration-test

integration-test

post-integration-test

verify

install

deploy

mvn package

Page 70: Java Build Tool course in 2011

validate

initialize

generate-sources

process-sources

generate-resources

process-resources

compile

process-classes

generate-test-sources

process-test-sources

generate-test-resources

process-test-resources

test-compile

process-test-classes

test

prepare-package

package

pre-integration-test

integration-test

post-integration-test

verify

install

deploy

mvn package

resources:resource

compiler:compile

resources:testResource

compiler:testCompile

surefire:test

jar:jar

install:install

deploy:deploy

Bind Phase To Plugin’s Goal

Page 71: Java Build Tool course in 2011

Maven Plugin

• Maven Plugin 能類比為 Ant Task

• 最初安裝的 Maven 有許多功能都沒有,但有記錄能處理該功能的 Plugin 名稱。

• 以 Maven Compiler Plugin 為例,它的名稱為:– org.apache.maven.plugins:maven-compiler-plugin

– org.apache.maven.plugins 是 Group ID

– maven-compiler-plugin 是 Artifact ID

• 每個以 Maven 管理的專案都由 GroupID:ArtifactID 組合成一個獨一無二的名稱。

Page 72: Java Build Tool course in 2011

Maven Plugin

• 每個以 Maven 透過 GroupID:ArtifactID 換算成 Maven Repository 的檔案位置。

• Maven Plugin 會利用轉換出的 URL 進行下載。下載之後, Maven 就獲得該 Plugin 的能力。

Page 73: Java Build Tool course in 2011

Maven Dependency Management

• Maven 是宣告式專案管理工具– 使用 pom.xml 定義專案的

• 相關 Plugin 設定

• 相依關係

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>

<groupId>maven.lab</groupId> <artifactId>hello.maven</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging>

<name>hello.maven</name> <url>http://maven.apache.org</url>

<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>

<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies></project>

Page 74: Java Build Tool course in 2011

Maven Dependency Management

• 相依套件的取得方式與 Maven Plugin 相同, Maven 能利用: junit:junit 至 Repository 取得檔案– http://repo1.maven.org/maven2/junit/junit/

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope></dependency>

Page 75: Java Build Tool course in 2011

Maven In Eclipse

• 以 Build Tool 的角度來看 Maven ,它是個具有一致操作方式的工具。只要會使用 Maven 的人,拿到使用 Maven 建立的專案,就會明白如何編譯它。

• 以專案管理工具的角度來看 Maven ,它是個相當方便的『相依性』管理工具,任何程式套件的使用,只要『宣告』即可。

• m2eclipse plugin 讓 Eclipse 具有建立 Maven 專案的能力,並獲得相依管理的好處。

Page 76: Java Build Tool course in 2011

安裝 m2eclipse

• 使用 m2eclipse update site– http://m2eclipse.sonatype.org/sites/m2e

Page 77: Java Build Tool course in 2011

安裝 m2eclipse

Page 78: Java Build Tool course in 2011

安裝 m2eclipse

Page 79: Java Build Tool course in 2011

安裝 m2eclipse

Page 80: Java Build Tool course in 2011

安裝 m2eclipse

Page 81: Java Build Tool course in 2011

安裝 Maven Command Tool

• Maven 與 Ant 一樣其實都是命令列工具。在安裝完 m2eclipse 後,我們也一併安裝 Maven Command Tool 。– 由 http://maven.apache.org/ 官網下載 maven

– 將它解壓縮至 C:\app

Page 82: Java Build Tool course in 2011

安裝 Maven Command Tool

• 設定環境變數– 將 maven 的 bin 路徑加入 PATH 內

• EX. C:\app\apache-maven-3.0.3\bin

Page 83: Java Build Tool course in 2011

安裝 Maven Command Tool• 設定 m2eclipse

增加新安裝的 Maven目錄

Page 84: Java Build Tool course in 2011

Maven Project

• 安裝 m2eclipse 後, Eclipse 就能建立 Maven Project

Page 85: Java Build Tool course in 2011

Maven Project

Page 86: Java Build Tool course in 2011

Maven Project

• 選擇專案樣本: maven-archetype-quickstart

Page 87: Java Build Tool course in 2011

Maven Project

• 每個 Maven Project 必需有– groupId

– artificatId– version

Page 88: Java Build Tool course in 2011

Maven Project

Page 89: Java Build Tool course in 2011

Maven Project

• 常用的 Maven 命令

Page 90: Java Build Tool course in 2011

在 IDE 中操作 Maven

• Maven 設定管理功能表

Page 91: Java Build Tool course in 2011

Maven POM View

Page 92: Java Build Tool course in 2011

Maven POM Editor

Page 93: Java Build Tool course in 2011

Maven 專案流程

開發者

Maven Project

建立開發、實作

發佈引用

Page 94: Java Build Tool course in 2011

Maven 專案流程

開發者

Maven Project

建立開發、實作

發佈引用

Maven ProjectMaven Project

Maven Project引用

引用

引用

Page 95: Java Build Tool course in 2011

Maven Repository

• Central Repository– 定義在 Super POM 裡的 Repository 站台

• Local Repository– 使用者目錄下的 .m2 目錄

• Private Repository– 使用 Maven Repository 工具架設的私有 Repository– 一般企業內部會自行架設,以放置屬於該公司智財部分的套件

Page 96: Java Build Tool course in 2011

Lab 3 架設 Maven Repository

• 實作目標:架設 Maven Repository

• 相關檔案:– Jetty Server(jetty-distribution-7.3.0.v20110203.zip)

• 我們採用 Nexus War 架設 Nexus Repository ,為練習方便以 Jetty Server 作為 Web Server 是最簡單的。

– Nexus(nexus-webapp-1.9.0.2.war)• Nexus 有二種安裝方式,一種是使用它自己的 Web Server 。另一

種是安裝在既有的 Servlet/JSP Container 之上,例如: Tomcat 或 Jetty 都是常見的選擇。

Page 97: Java Build Tool course in 2011

• 在 Jetty 安裝目錄下,使用下列指令啟動 Server– java -jar start.jar

Lab 3 架設 Maven Repository

Page 98: Java Build Tool course in 2011

• 開啟瀏覽器,查看是否能連至 http://localhost:8080

Lab 3 架設 Maven Repository

Page 99: Java Build Tool course in 2011

• 安裝 Nexus Repository– 將 nexus-webapp-1.9.0.2.war 複製一份改名為 nexus.war– 改名後的 nexus.war 複製到 Jetty 安裝路徑下的 webapps– 最後,瀏覽網址 http://localhost:8080/nexus

Lab 3 架設 Maven Repository

Page 100: Java Build Tool course in 2011

• 登入 Nexus Repository– Nexus 預設的管理者帳號為 admin ,密碼 admin123

Lab 3 架設 Maven Repository

Page 101: Java Build Tool course in 2011

• 設定 Nexus Repository– 由 Administrator Server 找出 Default HTTP Proxy

Settings– 請設定適當的內容

Lab 3 架設 Maven Repository

Page 102: Java Build Tool course in 2011

• 實作回顧– 我們使用 Jetty Server 作為簡單的 Servlet/JSP Container 服

務 Nexus Repository– 架設者適網路環境設定是否採用 Proxy 設定

• 其它注意事項– 若您是負責架構 Nexus 負責人員,請注意

• 若內部使用,其實不需要有對外的 IP ,但 Nexus Repository 本身要能抓取外部資料

• 刪除不必要的帳號,修改預設的管理者密碼

– 無論如何,管理人有責任詳細閱讀手冊,並瞭解安全注意事項。

Lab 3 架設 Maven Repository

Page 103: Java Build Tool course in 2011

Lab 4 架設 Maven 專案流程

• 實作目標:體驗 Maven 專案開發流程

• 實作重點:– 設定 Maven 能 Private Repository

• 設定 Maven Configuration : ${MAVEN}/conf/settings.xml• 設定專案的發佈位置: pom.xml

– 將 Maven 專案發佈至 Private Repository• 使用 Deploy phase

Page 104: Java Build Tool course in 2011

• 為了使安裝的 Maven 能透過 Private Repository 抓取檔案,必需修改 settings.xml 。

利用先前在 m2eclipse 設定過的 External Maven。點選 open file 它會開啟 XML Editor

Lab 4 架設 Maven 專案流程

Page 105: Java Build Tool course in 2011

• 在 <profiles> 標籤內增加一組 <profile>

<profile> <id>nexus</id> <repositories> <repository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories></profile>

Lab 4 架設 Maven 專案流程

Page 106: Java Build Tool course in 2011

• 在 <mirrors> 標籤內增加一組 <mirror>

• 在 <activeProfiles> 標籤內增加一組 <activeProfile>

<mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8080/nexus/content/groups/public</url></mirror>

<activeProfiles> <activeProfile>nexus</activeProfile></activeProfiles>

Lab 4 架設 Maven 專案流程

Page 107: Java Build Tool course in 2011

• Maven Global Configuration 設定摘要– 在 settings.xml 設定 profile 指定要新的一組 repository 與

plugin repository ,並且它的 id 為 nexus– 在 mirrors 對應裡,將所有的請求都指定給 Private

Repository– 在 activeProfiles 內指定 nexus 的設定是啟用的狀態

Lab 4 架設 Maven 專案流程

Page 108: Java Build Tool course in 2011

• 再次對 Maven 專案做 package 動作時,您會看到它下載的位置有所變換:

Lab 4 架設 Maven 專案流程

Page 109: Java Build Tool course in 2011

• 當專案開發已經進入一個階段,我們會將目前的專案發佈至 Private Repository 供其他開發者使用。– 修改 pom.xml 確定有發佈目標設定

– 修改 settings.xml 設定具有發佈權限的使用者帳號

Lab 4 架設 Maven 專案流程

Page 110: Java Build Tool course in 2011

• 在專案的 <project> 下增加 <distributionManagement> 設定

<distributionManagement> <repository> <id>nexus.release</id> <name>public</name> <url>http://localhost:8080/nexus/content/repositories/releases</url> </repository> <snapshotRepository> <id>nexus.snapshot</id> <name>snapshots</name> <url>http://localhost:8080/nexus/content/repositories/snapshots</url> </snapshotRepository></distributionManagement>

Lab 4 架設 Maven 專案流程

Page 111: Java Build Tool course in 2011

• 在專案若你試著執行 deploy 會發生錯誤,這是因為您還沒有設定可供上傳用的帳號,因而被 Private Respository 拒絕。

Lab 4 架設 Maven 專案流程

Page 112: Java Build Tool course in 2011

• 修改 settings.xml 在 <servers> 增加一組對應的帳號、密碼:

• 再次執行 deploy 就能成功上傳至 Private Repository

<server> <id>nexus.snapshot</id> <username>admin</username> <password>admin123</password></server>

Lab 4 架設 Maven 專案流程