整理筆記--gradle,筆記--gradle
Gradle
概念:開源的項目自動化構建工具,在Ant和Maven的基礎上,引入了基於Groovy的特定領域語言(DSL),不再使用XML形式管理構建指令碼。
Tools-->groovy Console-->開啟groovy視圖
Groovy與Java比較:
// 類、方法預設是public的 完全相容Java的文法public class ProjectVersion{// 大版本private int major;// 小版本private int minor;ProjectVersion(int major, int minor) {this.major = majorthis.minor = minor}int getMajor() {// 最後一個運算式的值會被作為傳回值(最後一個方法的return可以不寫)major}void setMajor(int major) {this.major = major}}// 分號是可選的ProjectVersion v1=new ProjectVersion(1,1)// 編譯器給屬性自定添加getter/setter方法 屬性可以直接用點號擷取println v1.minorProjectVersion v2=null// == 等同於equals(),不會有NullPlinterExceptionsprintln v2==v1
高效Groovy特性:
//1 可選的類型定義//def version=1//2 assert 失敗的斷言 因為version上面為1//assert version==2//3 括弧是可選的//println version//4 字串/*def s1='imooc' //僅僅是字串def s2="gradle version is ${version}" //可以插入變數def s3='''my name is imooc''' //可以換行println s1println s2println s3*///5 集合api//list/*def buildTools=['ant','maven']buildTools << 'gradle' //添加元素assert buildTools.getClass() == ArrayList //預設是ArrayListassert buildTools.size() ==3 //斷言size*///map/*def buildYears=['ant':2000,'maven':2004]buildYears.gradle=2009//添加元素println buildYears.antprintln buildYears['gradle']println buildYears.getClass() == LinkedHashMap //預設是LinkedHashMap*///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)*/
最簡單的例子(build.gradle):
//構建指令碼中預設都是有個Project執行個體的apply plugin:"java" //apply方法 plugin:"java"具名引數 --》代表著使用java這個外掛程式version='0.1' //變數repositories{mavenCentral() //閉包 無參調用repositories(倉庫)方法}dependencies{compile 'commons-codec:commons-codec:1.6' //閉包 有參調用dependencies(依賴管理)方法}
TODO應用程式版:
TodoItem類:
public class TodoItem {//待辦事項名稱private String name;//已完成private boolean hasDone;public TodoItem(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean isHasDone() {return hasDone;}public void setHasDone(boolean hasDone) {this.hasDone = hasDone;}@Overridepublic String toString() {return name+(hasDone ? "hasDone":"need to do")+"!";}}
App類:
import java.util.Scanner;public class App {public static void main(String[] args) {int i=0;Scanner scanner = new Scanner(System.in);while (++i>0){System.out.println(i+". please input todo item name:");TodoItem item=new TodoItem(scanner.nextLine());System.out.println(item);}}}
進入構建欄目:
然後打成jar包
有main()方法 就可以直接終端啟用了
TODO--web版:
右擊項目選擇add framework support --> 勾選web application(註:點擊Java EE可選擇java ee版本)==》添加web
編寫個簡單的index.html
apply plugin:'war' //使用war外掛程式
點擊war進行構建 構建好後 放到tomcat的webapps下 啟動tomcat進行測試
構建指令碼概要:
構建塊:
基本概念:
每個構建至少包含一個項目,項目中包含一個或多個任務。
1.項目(project)
一個項目代表一個正在構建的組件(比如一個jar檔案),當構建啟動後,Gradle會基於build.gradle執行個體化一個org.gradle.api.Project類,並且能夠通過project變數使其隱式可用。
group、name、version來確認倉庫中的唯一座標。
重要的方法:
1.apply(外掛程式) 2.dependencies(依賴) 3.repositories(倉庫) 4.task(任務)
屬性的其他配置方式:
ext、gradle.properties
2.任務(task)
對應org.gradle.api.Task。主要包括任務動作和任務依賴(dependsOn)。任務動作定義了一個最小的工作單元。可以定義依賴於其他任務、動作序列和執行條件。
自訂任務(build.gradle):
//閉包def createDir = {path ->File dir = new File(path);if (!dir.exists()) {dir.mkdirs();}}//自訂任務1task makeJavaDir() {def paths = ['src/main/java', 'src/main/resources', 'src/test/java', 'src/test/resources']//在動作列表之前插入doFirst {paths.forEach(createDir);}}//自訂任務2task makeWebDir(){//任務依賴dependsOn 'makeJavaDir'def paths=['src/main/webapp','src/test/webapp']//在動作列表之後插入doLast {paths.forEach(createDir)}}
進入構建欄目:
自訂任務在other這裡。
構建生命週期:
初始化(項目)-->配置(依賴關係和執行圖)-->執行(動作 如:doFirst doLast )
依賴管理:
常用倉庫:
mavenLocal/mavenCentral/jcenter==》第一個是本地倉庫 後兩個是公用倉庫
自訂maven倉庫==》maven私服
寫法:
repositories{maven{url '私服倉庫地址'}}
階段配置:
原始碼階段:
1.compile(編譯階段) 2.runtime(運行時階段)
測試階段:
1.testCompile(編譯階段) 2.testRuntime(運行時階段)
一般都使用編譯極端的依賴。
如:compile 'group、name、version'
解決版本衝突:
1.查看依賴報告
先修改預設解決方案策略(gradle預設依賴最新版本)
//發現版本衝突就自動構建失敗configurations.all{resolutionStrategy{failOnVersionConflict()}}
2.排除傳遞性依賴
compile('org.hibernate:hibernate-core:3.6.3.Final'){exclude group:"org.slf4j",module:"slf4j-api"}
3.強制一個版本
configurations.all{resolutionStrategy{force 'org.slf4j:slf4j-api:1.7.24'}}
多項目構建:
發布:
allprojects{apply plugin: 'java'sourceCompatibility=1.8//外掛程式發布apply plugin: 'maven-publish'publishing{publications{//可以定義多個發布包myPublish(MavenPublication){//發布javafrom components.java}}repositories{maven{name "自訂名稱"url "私服倉庫地址"}}}}