Java Build Tool course in 2011

993 views

Published on

Published in: Self Improvement, Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
993
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
26
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Java Build Tool course in 2011

  1. 1. Java Build ToolsJava Build Tools Ant & MavenAnt & Maven 2011, qrtt12011, qrtt1
  2. 2. 軟體開發 開發者 進行程式寫作 利用 IDE 或呼叫 Java Compiler 進行編譯
  3. 3. 關於軟體開發 • Top Down 由上至下的開發模式 – 先定義總體流程及主要類別 – 各流程的接合界面有哪些 – 模擬整合後的運作情形 – 由整體需求出發,較不會開發出多餘的功能。 • Bottom Up 由下至上的開發模式 – 先實作可能需要用到的元件 – 依功能模組責任分工 – 最後試著整合看看 – 以功能導向出發,較易開發出精緻的功能。
  4. 4. 關於軟體開發 • Top Down 由上至下的開發模式較適用於專案開發。對 專案來說最容易拖延進度是在最後整合的階段, Top Down 的模式,使得整合的模型在最初就形成,並且能 利用持續性整合的方式,針對每一批新增的功能做總體 的測試,對需求而變更實作的彈性較高。 • Bottom Up 由下至上的開發模式較適於獨立的公用程式。 此種開發模式優點在於針對特定功能定義明確,往往能 發展出較精確的測試案例。 • 無論專案以何種模式進行,測試案例與測試工具的使用 都能輔助您提昇開發品質。
  5. 5. 關於程式編譯 • 使用 IDE 編譯程式 – 便利性佳,有顯眼的錯誤、警告提醒 – 即使方便,但無法進行自動化編譯 • 手動呼叫 Java Compiler – 使用上較為不便 – 手工處理 CLASSPATH 較易出錯 – 實務上會寫成 Script • Linux : Shell Script • Windows : .BAT
  6. 6. Build Tool Developer OR Build Server check out build document library application auto testing Build Tool Version Control commit
  7. 7. Build Tool • 建構工具 – 對每一個軟體專案來說,我們期待不管歷經多久,轉換過哪些 開發者。最新一批的維護者,將原始碼由版本控制系統取提出 來後,有辦法輕鬆地建構它。
  8. 8. Build Tool • 建構工具 – 以事先準備的編譯腳本編譯 – 編譯條件、參數保存於檔案,即使換人來做也能有一致的結果 – Ant 與 Maven 是 Java 軟體開發最常用的 Build Tool
  9. 9. Ant • Apache Ant – http://ant.apache.org – Java 專案中最廣泛使用的建構工具 – 能透過簡單的 XML 撰寫編譯腳本
  10. 10. 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 設計統一的編譯工具,編譯的流程難以達到 『一寫通用』
  11. 11. Ant 的設計哲學 • 提供一個可移植性高的編譯與部署工具 – 設計必需簡單易學 • Ant 的核心模型概念只有三個:專案、執行目標、任務 – 使用者能輕易讀懂編譯腳本 • Ant 使用已廣為人知道 XML 作為腳本語言 – 工具必需能夠讓使用者擴充 • Ant 提供擴充 API 讓進階使用者能擴充新功能
  12. 12. Ant build file = 1 個專案的 Build Script <project> <target 1> <target 2> <target N> Task Task Task Task Task Task
  13. 13. Ant 的學習技巧 • Ant 是一個指令工具 – 初學時,多瀏覽 Ant 手冊與常用 Task • http://ant.apache.org/manual/ – 將常用的指令參數,使用慣例寫成 CheatSheet ( 小抄 ) – 蒐集工作上常用的 Task 範例 • <javac> • <jar> • <ftp> • <cvs> – 使用 IDE 輔助學習 • Eclipse 或 NetBeans 都能加速您編寫 Build Script 的時間
  14. 14. Ant 手冊導覽 各類 Ant Tasks
  15. 15. Ant 手冊導覽 編譯用的相關 Task ,其中 Javac 是我們最常用的
  16. 16. Ant 手冊導覽 每一個 Task 進去都會有詳細的說明
  17. 17. Ant 手冊導覽 • Task 說明頁也包含完整的參數列表、是否為必要項目、 預設值是什麼
  18. 18. Ant 手冊導覽 • 多數的 Task 會包含使用範例。這是我們使用、學習 Task 用法的重要參考資料:
  19. 19. Ant In Daily • AntInDaily 專案的主要功能為 ConfigurationManager 。這是許多專 案開發時都會提供的類別,功能只有 負責讀入設定檔,並將它轉成物件。
  20. 20. Ant In Daily • ConfigurationManager 會讀入 config.properties ,並提供 getDatabaseInfo() 方法,將部分的 參數集合成 DatabaseInfo 物件。
  21. 21. Ant In Daily • 專案內有個 config 目錄,並且包含 二個子目錄 – dev – prod • 我們期望一般開發時,程式編譯是使 用 dev 目錄內的設定檔;當要編譯 正式環境版本時,要改用 prod 目錄 的設定檔
  22. 22. Ant In Daily • IDE 能輔助開發,並且在程式語法完 整、正確時,替您編譯出最新的 .class 檔。
  23. 23. Ant In Daily • IDE 難以切換不同情境的編譯: – 正式環境版本 – 開發環境版本 • 依賴『手工』容易出錯 – 複製檔案 – 改寫設定檔 • 『在我的電腦上,跑起來沒問題啊!』 • 『一定是你的電腦怪怪的!』正式版 開發版
  24. 24. Ant In Daily • IDE 難以選用不同的 Library 版本 – 依賴人工操作 UI 來替換不同的 Library – 使用 Ant 能透過參數化,在編譯時決定要 使用的版本。 • 在某些情況,我們希望使用完全不同的 版本進行編譯,並且打包成一個 Fat JAR
  25. 25. 撰寫 Ant Build Script In Eclipse • 工欲善其事,必先利其器 – 熟悉 Eclipse 撰碼提示功能 – 熟悉 Ant Editor 的提示 • 學習目標: – 正式進入 Ant In Daily 實作前,以利用一個較簡單的 MyProject 從無到有寫出 Ant Build Script – 熟悉 Ant 手冊的形式,加速對手冊的閱讀及範例使用
  26. 26. 撰寫 Build Script for Ant • 新增 build.xml – Ant 預設的 Script File 名稱為 build.xml – Eclipse 開啟 build.xml 時,會自動選用 Ant Script Editor – 使用撰碼提示功能,快速產生 Build Script 樣版
  27. 27. 撰寫 Build Script for Ant • 要使用撰碼提示 (Content Assist) 功能,您可以: – Edit 功能表  Content Assist – 使用熱鍵 Alt + / • 右邊的圖例,撰碼提示的熱鍵顯示 為 Ctrl + Space 。這是正確的,因 為 Eclipse 同一個功能可能有多組 設定,而 Ctrl + Space 恰為開啟 中文輸入法的熱鍵,我們只能改用 Alt + / ( 或自定不同的組合 )
  28. 28. 撰寫 Build Script for Ant
  29. 29. 撰寫 Build Script for Ant 將樣本多餘的部分刪除,留下一個 <target> 輸入 <jav 並使用撰碼提示
  30. 30. 撰寫 Build Script for Ant <javac> • 我們即將使用 <javac> 編譯專案,但是該如何使用呢? – 參考手冊的範例 <javac srcdir="src" destdir="build" />
  31. 31. 撰寫 Build Script for Ant Run Ant Script from Eclipse • 在 build.xml 開啟右鍵選單,執行 Run  Ant Build C:workspace2MyProjectbuild.xml:8: destination directory "C:workspace2MyProjectbuild" does not exist or is not a directory
  32. 32. 撰寫 Build Script for Ant <mkdir> • 使用 <mkdir> 建立缺少的 build 目錄
  33. 33. 撰寫 Build Script for Ant <mkdir>
  34. 34. 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>
  35. 35. 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
  36. 36. 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 mkdir copy javac mkdir copy javac junitjavadoc jar war ftp ftp copy java exec
  37. 37. Script For AntInDaily • 觀察看看: – 有哪些 XML Tag 或 Attribute 是新出現的呢?
  38. 38. Script For AntInDaily • 參數獨立於設定檔
  39. 39. Script For AntInDaily prepare compile package clean default
  40. 40. 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>
  41. 41. Script For AntInDaily • Compile – 編譯原始碼 • Ant 是專為 java 專案設計的,處理 CLASSPATH 相 當便利 <target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${build.dir}"> <classpath refid="classpath" /> </javac> </target>
  42. 42. 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>
  43. 43. Script For AntInDaily • Clean – 清除編譯的目錄 • 清除的動作是重要的,這樣可以保證每一次的結果是最 正確的。不會只有部分重新編譯而產生難以理解的結果 。 <target name="clean"> <delete dir="${build.dir}" /> </target>
  44. 44. Ant – Property & DataType • Project 、 Target 、 Task 是撰寫 Ant Script 的重要成 份。 • Property 與 DataType 則是 Ant 重要的基礎設施,如 同一個程式語言要有內建類別一樣。
  45. 45. Ant – Property • Property – 透過 property 將參數轉換成變數,這使得您的專案更加有彈 性。 – 它也能透過在參數列指定 • ant -Dfoo.library=my_foo_library.jar
  46. 46. Ant - DataType • 語法與型別是程式語言的基礎,而 Ant 提供了我們一些 基本的型別,讓我們處理編譯工作最常需要面對的 – 路徑 – 檔案列表 • 複製 <copy> 免不了得處理路徑與檔案 • 編譯 <javac> 需要的 classpath 免不了得處理路徑與 檔案 • 執行 <java> 需要的 classpath 免不了得處理路徑與檔 案 • 打包 <jar> 也許需知道哪些檔案該包進去
  47. 47. <fileset> • 手冊 – http://ant.apache.org/manual/Types/fileset.html
  48. 48. <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>
  49. 49. <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 .. 是多麼繁複呢?
  50. 50. • 實作目標:完成 AntInDaily 的 build.xml • 實作摘要: – 完成 build.xml 的 path reference 定義 – 完成 <javac> 內 classpath 引用上一步定義的 path reference • 環境準備 – 請匯入 Lab1 • 本教材假設您已在操作環境將 JDK 6.0 含以上版本安裝 完畢 Lab 1 撰寫 AntInDaily 的 build.xml
  51. 51. Lab 1 撰寫 AntInDaily 的 build.xml • 當您開啟 build.xml 會看到定義專案的 classpath 部分 是被註解的,請使用 <fileset> 選用在 ${lib.dir} 內的 JARs
  52. 52. Lab 1 撰寫 AntInDaily 的 build.xml • 接著,您必需在 <javac> 內使用 <classpath> 標籤, 並使用先前定義的 path reference :
  53. 53. 擴充 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"/>
  54. 54. 擴充 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">
  55. 55. 擴充 Ant • CheckStyle 是一套程式碼靜態分析工具,它主要的功能 是輔助開發者,撰寫程式碼儘可能合乎建議的慣例。 • 利用 CheckStyle 工具提供的 Ant Task ,我們能輕鬆 地在 Build Process 順便回報目前專案程式碼的分析結 果:
  56. 56. Lab 2 替 Ant 新增 CheckStyle Task • 實作目標:增加 CheckStyle Task • 實作摘要: – 建立新的 path reference 指向 CheckStyle JAR – 建立 check Target 它會執行 CheckStyle – 在 check Target 內宣告 CheckStyle Task – 使用 <checkstyle> Task 對專案原始碼資料夾進行分析 • 檔案 – 請匯入 Lab2
  57. 57. • Lab2 多出 lib.build 資料 夾,將只有 Build Tool 會 使用到的 JARs 與相關設 定檔獨立放置是個好習慣 。 • 請建立一個新的 path reference 名為 classpath.build 指到這個 目錄 Lab 2 替 Ant 新增 CheckStyle Task
  58. 58. • 使用 <path> 標籤建立 path reference • 同樣的,保持將實際的目錄參數化的好習慣。 Lab 2 替 Ant 新增 CheckStyle Task
  59. 59. • 建立 check Target 宣告 checkstyle Task ,並使用先前建好的 path reference 呼叫 <checkstyle> 分析現有的原始碼目錄 Lab 2 替 Ant 新增 CheckStyle Task
  60. 60. 在 IDE 外執行 Ant • 透過 IDE 學習 Ant Script 的撰寫是相當方便的。對於 軟體開發者來說,讓工作更加自動化也是重要的。當您 學會在 IDE 之外使用 Ant 時,它能帶給您更多的便利 。 • 執行 Ant 的方法: – IDE • Run As Ant Build • Click Ant View Button – 命令列
  61. 61. 在 IDE 外執行 Ant • 安裝 Ant 命令列工具 – 將在 Ant 官網下載回來的壓縮檔解壓縮: • Ex. C:appapache-ant-1.8.2 – 設定環境變數 • ANT_HOME= C:appapache-ant-1.8.2 • 並在 PATH 變數再加上 %ANT_HOME%bin
  62. 62. 在 IDE 外執行 Ant • 開啟命令列,測試 Ant 安裝是否正確
  63. 63. 在 IDE 外執行 Ant • 您可以試著使用 Ant 編譯,先前在 IDE 編譯的專案:
  64. 64. 在 IDE 外執行 Ant • 當您在 IDE 內寫完 Ant Build Script 後,除了在 IDE 上測試,強烈建議您也使用外部的 Ant 程式執行看看。 • IDE 附的 Ant 版本往往比您後來下載的『舊』,多一 份用心,稍為測試一下。
  65. 65. 在 IDE 外執行 Ant • 當 Ant 能在 IDE 外執行後,我們還可以: – 使用 Ant 來執行 Java 程式 • 利用 Ant 的功能,簡單處理 CLASSPATH – 使用 Ant 來輔助其他任務 • 在 Linux 下有方便的 Shell Script 。 Windows 的 .Bat 相較之下 是較陽春的。 • 將複雜的功能交給 Ant , .Bat 只要負責喚起 Ant Script 就行了 – <cvs> – <ftp> – <ssh> • .Bat 配合 Windows 排程即可完成週期性任務
  66. 66. Maven • Maven 的設計哲學: 使用慣例優先於組態設定 • Ant 沒有使用慣例的設計:任何專案都能由無到有地寫 出 Build Script 。使用上極為彈性,能做出 Build Tool 之外的應用。
  67. 67. Maven • 專案結構上的慣例 – ${basedir} • src – main » java » resource – test » java » resource • target – classes
  68. 68. Maven • 操作介面的慣例 • 透過指定 Build Phase 名稱來完成工作: – install – package – test – deploy – site • Ant 則提供給開發者彈性,自由選擇 Target 名稱。
  69. 69. 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 mvn package
  70. 70. 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
  71. 71. 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 組 合成一個獨一無二的名稱。
  72. 72. Maven Plugin • 每個以 Maven 透過 GroupID:ArtifactID 換算成 Maven Repository 的檔案位置。 • Maven Plugin 會利用轉換出的 URL 進行下載。下載之 後, Maven 就獲得該 Plugin 的能力。
  73. 73. 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>
  74. 74. 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>
  75. 75. Maven In Eclipse • 以 Build Tool 的角度來看 Maven ,它是個具有一致操 作方式的工具。只要會使用 Maven 的人,拿到使用 Maven 建立的專案,就會明白如何編譯它。 • 以專案管理工具的角度來看 Maven ,它是個相當方便 的『相依性』管理工具,任何程式套件的使用,只要 『宣告』即可。 • m2eclipse plugin 讓 Eclipse 具有建立 Maven 專案的 能力,並獲得相依管理的好處。
  76. 76. 安裝 m2eclipse • 使用 m2eclipse update site – http://m2eclipse.sonatype.org/sites/m2e
  77. 77. 安裝 m2eclipse
  78. 78. 安裝 m2eclipse
  79. 79. 安裝 m2eclipse
  80. 80. 安裝 m2eclipse
  81. 81. 安裝 Maven Command Tool • Maven 與 Ant 一樣其實都是命令列工具。在安裝完 m2eclipse 後,我們也一併安裝 Maven Command Tool 。 – 由 http://maven.apache.org/ 官網下載 maven – 將它解壓縮至 C:app
  82. 82. 安裝 Maven Command Tool • 設定環境變數 – 將 maven 的 bin 路徑加入 PATH 內 • EX. C:appapache-maven-3.0.3bin
  83. 83. 安裝 Maven Command Tool • 設定 m2eclipse 增加新安裝的 Maven 目錄
  84. 84. Maven Project • 安裝 m2eclipse 後, Eclipse 就能建立 Maven Project
  85. 85. Maven Project
  86. 86. Maven Project • 選擇專案樣本: maven-archetype-quickstart
  87. 87. Maven Project • 每個 Maven Project 必需有 – groupId – artificatId – version
  88. 88. Maven Project
  89. 89. Maven Project • 常用的 Maven 命令
  90. 90. 在 IDE 中操作 Maven • Maven 設定管理功能表
  91. 91. Maven POM View
  92. 92. Maven POM Editor
  93. 93. Maven 專案流程 開發者 Maven Project 建立 開發、實作 發佈引用
  94. 94. Maven 專案流程 開發者 Maven Project 建立 開發、實作 發佈引用 Maven Project Maven Project Maven Project引用 引用 引用
  95. 95. Maven Repository • Central Repository – 定義在 Super POM 裡的 Repository 站台 • Local Repository – 使用者目錄下的 .m2 目錄 • Private Repository – 使用 Maven Repository 工具架設的私有 Repository – 一般企業內部會自行架設,以放置屬於該公司智財部分的套件
  96. 96. 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 都是常見的選擇。
  97. 97. • 在 Jetty 安裝目錄下,使用下列指令啟動 Server – java -jar start.jar Lab 3 架設 Maven Repository
  98. 98. • 開啟瀏覽器,查看是否能連至 http://localhost:8080 Lab 3 架設 Maven Repository
  99. 99. • 安裝 Nexus Repository – 將 nexus-webapp-1.9.0.2.war 複製一份改名為 nexus.war – 改名後的 nexus.war 複製到 Jetty 安裝路徑下的 webapps – 最後,瀏覽網址 http://localhost:8080/nexus Lab 3 架設 Maven Repository
  100. 100. • 登入 Nexus Repository – Nexus 預設的管理者帳號為 admin ,密碼 admin123 Lab 3 架設 Maven Repository
  101. 101. • 設定 Nexus Repository – 由 Administrator  Server 找出 Default HTTP Proxy Settings – 請設定適當的內容 Lab 3 架設 Maven Repository
  102. 102. • 實作回顧 – 我們使用 Jetty Server 作為簡單的 Servlet/JSP Container 服 務 Nexus Repository – 架設者適網路環境設定是否採用 Proxy 設定 • 其它注意事項 – 若您是負責架構 Nexus 負責人員,請注意 • 若內部使用,其實不需要有對外的 IP ,但 Nexus Repository 本身 要能抓取外部資料 • 刪除不必要的帳號,修改預設的管理者密碼 – 無論如何,管理人有責任詳細閱讀手冊,並瞭解安全注意事項 。 Lab 3 架設 Maven Repository
  103. 103. Lab 4 架設 Maven 專案流程 • 實作目標:體驗 Maven 專案開發流程 • 實作重點: – 設定 Maven 能 Private Repository • 設定 Maven Configuration : ${MAVEN}/conf/settings.xml • 設定專案的發佈位置: pom.xml – 將 Maven 專案發佈至 Private Repository • 使用 Deploy phase
  104. 104. • 為了使安裝的 Maven 能透過 Private Repository 抓取 檔案,必需修改 settings.xml 。 利用先前在 m2eclipse 設定過的 External Maven 。 點選 open file 它會開啟 XML Editor Lab 4 架設 Maven 專案流程
  105. 105. • 在 <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 專案流程
  106. 106. • 在 <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 專案流程
  107. 107. • Maven Global Configuration 設定摘要 – 在 settings.xml 設定 profile 指定要新的一組 repository 與 plugin repository ,並且它的 id 為 nexus – 在 mirrors 對應裡,將所有的請求都指定給 Private Repository – 在 activeProfiles 內指定 nexus 的設定是啟用的狀態 Lab 4 架設 Maven 專案流程
  108. 108. • 再次對 Maven 專案做 package 動作時,您會看到它 下載的位置有所變換: Lab 4 架設 Maven 專案流程
  109. 109. • 當專案開發已經進入一個階段,我們會將目前的專案發 佈至 Private Repository 供其他開發者使用。 – 修改 pom.xml 確定有發佈目標設定 – 修改 settings.xml 設定具有發佈權限的使用者帳號 Lab 4 架設 Maven 專案流程
  110. 110. • 在專案的 <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 專案流程
  111. 111. • 在專案若你試著執行 deploy 會發生錯誤,這是因為您還沒有 設定可供上傳用的帳號,因而被 Private Respository 拒絕。 Lab 4 架設 Maven 專案流程
  112. 112. • 修改 settings.xml 在 <servers> 增加一組對應的帳號 、密碼: • 再次執行 deploy 就能成功上傳至 Private Repository <server> <id>nexus.snapshot</id> <username>admin</username> <password>admin123</password> </server> Lab 4 架設 Maven 專案流程

×