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