摘要:時間年月日星期二說明本文部分內容均來自慕課網。項目一個項目代表一個正在構建的組件比如一個文件,當構建啟動后,會基于實例化一個類,并且能夠通過變量使其隱式可用。任務動作定義了一個最小的工作單元。
時間:2017年05月16日星期二
說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:無
個人學習源碼:https://github.com/zccodere/s...
石器時代:自動化構建工具產生之前
依賴管理:將所有使用到的jar包放到lib目錄下,不易管理,易出錯 測試:能不寫就不寫,一個一個運行測試 打包:通過eclipse的export導出jar包或war包 上傳:通過ftp工具進行上傳到服務器解壓運行
構建工具的作用
依賴管理:各種jar包及版本 測試、打包、發布:自動執行測試、打包、發布到指定的地方 機器能干的活,絕不自己動手
主流構建工具
Ant:編譯、測試、打包 Maven:依賴管理、發布 Gradle:Groovy語言管理構建腳本
示意圖
Gradle是什么
一個開源的項目自動化構建工具,建立在Apache Ant和Apache Maven概念的基礎上,并引入基于Groovy的特定領域語言(DSL),而不再使用XML形式管理構建腳本。
Gradle能做什么
進行依賴管理 自動化運行測試 打包 發布到指定地方1-2 課程介紹
快速嘗鮮
準備使用Gradle 第一個Gradle項目
基本原理
構建腳本介紹 依賴管理
深入實戰
多項目構建 測試 發布
示意圖
第二章:準備使用Gradle 2-1 gradle安裝安裝
確保已近安裝JDK,java –version驗證是否已經安裝。 從Gradle官網下載Gradle,https://gradle.org 配置環境變量,GRADLE_HOME 添加到path,%GRADLE_HOME%in; 驗證是否安裝成功,gradle –v2-2 Groovy理論介紹
Groovy是什么
Groovy是用于Java虛擬機的一種敏捷的動態語言,它是一種成熟的面向對象編程語言,既可以用于面向對象編程,又可以用作純碎的腳本語言。使用該種語言不必編寫過多的代碼,同時又具有閉包和動態語言中的其他特性。
與Java比較
Groovy完全兼容Java的語法 分號是可選的 類、方法默認是public的 編譯器給屬性自動添加getter/setter方法 屬性可以直接用點號獲取 最后一個表達式的值會被作為返回值 “==”等同于“equals()”,不會有NullPointerExceptions
高效的Groovy特性
assert語句 可選類型定義 可選的括號 字符串 集合API 閉包2-3 Groovy與Java比較
Java語法編寫標準JavaBean
代碼演示:
public class ProjectVersion{ private int major; private int minor; public ProjectVersion(int major,int minor){ this.major = major; this.minor = minor; } public int getMajor(){ return major; } public void setMajor(int major){ this.major = major; } public int getMinor(){ return minor; } public void setMinor(int minor){ this.minor = minor; } }
Groovy語言編寫JavaBean
class ProjectVersion{ private int major private int minor ProjectVersion(int major,int minor){ this.major = major this.minor = minor } }2-4 Groovy高效特性
Groovy高效特性
可選的類型定義 assert斷言 括號是可選的 字符串 集合API
代碼演示:
// 高效特性 // 1 可選的類型定義 def version = 1 // 2 assert //assert version == 2 // 3 括號是可選的 println version // 4 字符串 def s1 = "imooc" def s2 = "gradle version is ${version}" def s3 = """my name is imooc""" //println s1 //println s2 //println s3 // 5 集合API // list def buildTools = ["ant","maven"] buildTools << "gradle" assert buildTools.getClass() == ArrayList assert buildTools.size() == 3 // map def buildYear = ["ant":2000,"maven":2004] buildYear.gradle = 2009 //println buildYear.ant //println buildYear["gradle"] //println buildYear.getClass() // 6 閉包 def c1 = { v -> print v } def c2 = { print "hello" } def method1(Closure closure){ closure("param") } def method2(Closure closure){ closure() } method1(c1) method2(c2)2-5 Groovy重點
代碼演示:
// 構建腳本中默認都是有Project實例的 //Project實例的apply方法 apply plugin:"java" //Project實例的version屬性 version = "0.1" // 閉包作為參數調用repositories方法 repositories { mavenCentral() } // 閉包作為參數調用dependencies方法 dependencies { compile "commons-codes:commons-codes:1.6" }第三章:第一個Gradle項目 3-1 第一個Gradle項目介紹
示例介紹
ToDo應用程序,只實現添加代辦事項 Java應用程序版 Web版3-2 應用程序版
目錄結構
3-2 Web版代碼演示:
group "com.myimooc" version "1.0-SNAPSHOT" apply plugin: "java" apply plugin: "war" sourceCompatibility = 1.8 configurations.all { resolutionStrategy { failOnVersionConflict() // 強制指定一個版本 force "org.slf4j:slf4j-api:1.7.22" } } repositories { // maven{ // url "" // } mavenLocal() mavenCentral() } dependencies { // https://mvnrepository.com/artifact/org.hibernate/hibernate-core compile (group: "org.hibernate", name: "hibernate-core", version: "3.6.3.Final"){ // 排除傳遞依賴 exclude group:"org.slf4j",module:"slf4j-api" } // https://mvnrepository.com/artifact/ch.qos.logback/logback-classic compile "ch.qos.logback:logback-classic:1.2.3" testCompile group: "junit", name: "junit", version: "4.11" } // 聲明 閉包:創建目錄,需傳入參數為字符串目錄路徑 def createDir = { // 參數 path -> // 功能 println path File dir = new File(path); if(!dir.exists()){ dir.mkdirs(); } } // 任務:自動創建Java工程目錄結構 task makeJavaDir(){ // 定義數組存放目錄路徑 def paths = ["src/main/java", "src/main/resources", "src/test/java", "src/test/resources"]; // 添加動作:doFirst:在動作列表的前面插入一個動作 doFirst{ for(String path : paths){ // 調用 閉包 createDir(path) } } } // 任務:自動創建Web工程目錄結構 task makeWebDir(){ // 聲明當前任務依賴 makeJavaDir 任務 dependsOn "makeJavaDir" def paths = ["src/main/webapp", "src/test/webapp"] // 添加動作:doLast:在動作列表的后面插入一個動作 doLast{ for(String path : paths){ // 調用 閉包 createDir(path) } } }第四章:高級應用 4-1 構建腳本介紹
構建塊
Gradle構建中的兩個基本概念是項目(Project)和任務(task),每個構建至少包含一個項目,項目中包含一個或多個任務。在多項目構建中,一個項目可以依賴于其他項目;類似的,任務可以形成一個依賴關系圖來確保他們的執行順序。
項目(Project)
一個項目代表一個正在構建的組件(比如一個jar文件),當構建啟動后,Gradle會基于build.gradle實例化一個org.gradle.api.Project類,并且能夠通過project變量使其隱式可用。
項目的屬性和方法
group、name、version apply、dependencies、repositories、task 屬性的其他配置方式:ext、gradle.properties
任務(task)
任務對應org.gradle.api.Task。主要包括任務動作和任務依賴。任務動作定義了一個最小的工作單元??梢远x依賴于其他任務、動作序列和執行條件。
任務的方法
dependsOn doFirst、doLast<<4-2 自定義任務
代碼演示:
// 聲明 閉包:創建目錄,需傳入參數為字符串目錄路徑 def createDir = { // 參數 path -> // 功能 println path File dir = new File(path); if(!dir.exists()){ dir.mkdirs(); } } // 任務:自動創建Java工程目錄結構 task makeJavaDir(){ // 定義數組存放目錄路徑 def paths = ["src/main/java", "src/main/resources", "src/test/java", "src/test/resources"]; // 添加動作:doFirst:在動作列表的前面插入一個動作 doFirst{ for(String path : paths){ // 調用 閉包 createDir(path) } } } // 任務:自動創建Web工程目錄結構 task makeWebDir(){ // 聲明當前任務依賴 makeJavaDir 任務 dependsOn "makeJavaDir" def paths = ["src/main/webapp", "src/test/webapp"] // 添加動作:doLast:在動作列表的后面插入一個動作 doLast{ for(String path : paths){ // 調用 閉包 createDir(path) } } }4-3 構建生命周期
構建生命周期
初始化:初始化需要參與構建的項目 配置:根據配置代碼生成task的依賴順序和執行順序 執行:執行動作代碼
示意圖:
構建周期構造方法
4-4 依賴管理概述
幾乎所有的基于JVM的軟件項目都需要依賴外部類庫來重用現有的功能。自動化的依賴管理可以明確依賴的版本,可以解決因傳遞依賴帶來的版本沖突。
工件坐標
group:工件組 name:工件名稱 version:版本 通過這三個屬性來唯一確定一個jar包
常用倉庫
mavenCentral:公共倉庫 jcenter:公共倉庫 mavenLocal:本地倉庫 自定義maven倉庫:maven私服,公司內部倉庫 文件倉庫:不建議使用
依賴的傳遞性
B依賴A,如果C依賴B,那么C依賴A。
自動化依賴管理
依賴管理階段
源代碼:compile:編譯階段;runtime:運行階段。 測試代碼:testCompile:編譯階段;testRuntime:運行階段。
依賴階段關系
4-5 解決版本沖突版本沖突例子
解決沖突
查看依賴報告 排除傳遞性依賴 強制指定一個版本4-6 多項目構建介紹
項目模塊化
在企業項目中,包層次和類關系比較復雜,把代碼拆分成模塊通常是最佳實踐,這需要你清晰的劃分功能的邊界,比如把業務邏輯和數據持久化拆分開來。項目符合高內聚低耦合時,模塊化就變得很容易,這是一條非常好的軟件開發實踐。
TODO模塊依賴關系
配置要求
所有項目應用Java插件 web子項目打包成war 所有項目添加logback日志功能 統一配置公共屬性
項目范圍
4-7 多項目構建實戰詳見源代碼。
4-8 自動化測試自動化測試
一些開源的測試框架比如JUnit,TestNG能夠幫助你編寫復用的結構化的測試,為了運行這些測試,你要先編譯它們,就想編譯源代碼一樣。測試代碼的作用僅僅用于測試的情況,不應該被發布到生產環境中,需要把源代碼和測試代碼分開來。
項目布局
測試配置
測試任務
測試發現
任何繼承自junit.framework.TestCase或groovy.util.GroovyTestCase的類 任何被@RunWith注解的類 任何至少包含一個@Test注解的類4-9 發布
發布到本地和遠程倉庫
發布過程
使用maven-publish插件 配置發布任務,倉庫地址 執行發布任務,發布完成第五章:課程總結 5-1 課程總結
示意圖
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70094.html
時間:2017年12月01日星期五說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com 教學源碼:無 學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 熱部署的使用場景 本地調式 線上發布 熱部署的使用優點 無論本地還是線上,都適用 無需重啟服務器:提高開發、調式效率、提升發布、運維效率、降低運維成本 前置...
摘要:小時學會學習總結時間年月日星期六說明本文部分內容均來自慕課網。慕課網教學示例源碼暫無。數據庫操作下第六章事務管理事務管理只有查詢的時候不加事務,其它任何操作都要加事務。第七章課程回顧課程回顧總結介紹安裝配置的使用數據庫操作 《2小時學會SpringBoot》學習總結 時間:2017年2月18日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示...
摘要:時間年月日星期四說明本文部分內容均來自慕課網。那么里面的數據就可以分為各種各樣的索引,比如汽車索引圖書索引家具索引等等。圖書索引又可以細分為各種類型,比如科普類小說類技術類等等。具體到每一本書籍,就是文檔,就是整個圖書里面最小的存儲單位。 時間:2017年09月14日星期四說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https...
摘要:時間年月日星期日說明本文部分內容均來自慕課網。慕課網教學示例源碼無個人學習源碼第一章課程概述課程介紹課程須知本課程面向所有使用語言進行開發的小伙伴。 時間:2017年05月21日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:無個人學習源碼:https://github.com/zccodere/s... 第一章:課程概述 1-1 ...
閱讀 1135·2019-08-30 12:44
閱讀 641·2019-08-29 13:03
閱讀 2550·2019-08-28 18:15
閱讀 2418·2019-08-26 10:41
閱讀 3081·2019-08-26 10:28
閱讀 3028·2019-08-23 16:54
閱讀 1982·2019-08-23 15:16
閱讀 801·2019-08-23 14:55