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