開發(fā)rn的時候發(fā)現(xiàn)android一直用的是gradle構(gòu)建的,不明白其中意思所有就學(xué)一下
gradle是用groovy語言編寫的
所以先學(xué)下groovy吧
先來看下普通初始化構(gòu)建的gradle項目里面的文件
gradle構(gòu)建腳本默認(rèn)都有個project實例
group 'com.test.gradle'
version '1.0-SNAPSHOT' // 為project里面的屬性
apply plugin: 'java'
// projcet里面的apply的方法可以 即調(diào)用 apply(plugin:'java') 方法
apply plugin: 'war' // 在ide會自動生成war包
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
//下面聲明的是gradle插件的版本
testCompile group: 'junit', name: 'junit', version: '4.12'
}
屬性 group纫普,name,version唯一確定一個項目
方法 apply附鸽,dependencies,repositories(指定倉庫)瞒瘸,task(聲明項目有那些任務(wù))
屬性的其他配置方式:ext,gradle.properties
任務(wù)(rask)
任務(wù)對應(yīng)org.gradle.api.Task 主要包括任務(wù)動作和任務(wù)依賴坷备,任務(wù)動作定義了一個最小的工作單元,可以定義依賴于其他任務(wù)情臭,動作序列和執(zhí)行條件省撑。
里面的方法有:
dependsOn聲明任務(wù)依賴
doFirst (動作任務(wù)列表前面添加任務(wù)),doLast<<(動作列表后面添加任務(wù))
實現(xiàn)創(chuàng)建目錄的任務(wù)
def createDir={
path ->
File dir=new File(path)
if(!dir.exists()){
dir.mkdir();
}
}
// 任務(wù)一
task makeJavaDir(){
def paths = ['sec/main/java','src/main/resources','src/test/java'];
doFirst{
paths.forEach(createDir);
}
}
// 任務(wù)一
task makeWebDir(){
dependsOn('makeJavaDir') // 聲明此任務(wù)依賴makejavadir任務(wù)
def paths=['src/main/webapp','src/test/webapp'];
doLast {
paths.forEach(createDir)
}
}
常用倉庫
mavenLocal (本地倉庫)/mavenCentral(遠(yuǎn)程倉庫)/jcenter
依賴的傳遞性
b依賴a,如果c依賴b俯在,那么c就依賴a依賴階段配置
compile編譯階段 runtime運行階段
testCompile testRuntime
- 解決沖突
查看依賴報告
排除傳遞性依賴
強(qiáng)制一個版本 - 修改默認(rèn)解決策略
//發(fā)現(xiàn)版本沖突就使他構(gòu)建失敗,可以清楚的看到版本沖突
configurations.all{
resolutionStrategy{
failOnVersionConflict()
}
}
- 排除傳遞性依賴
// 把hibernate里面依賴的slf4j的包給排除掉竟秫,引用本項目的
compile("org.hibernate:hibernate-core:3.6.3.Final"){
exclude group: "org.slf4j", module:"slf4j-api"
}
- 強(qiáng)制指定一個版本
// 強(qiáng)制指定一個最高版本的slf4j
configurations.all{
resolutionStrategy{
force 'org.slf4j:slf4j-api:1.7.24'
}
}
- 本地組件互相依賴的配置
dependencies {
implementation project(":todoItem") // todoItem是項目的最后一個名詞如com.app.todoItem
}
在settings.gradle 里面引入所有的子項目
rootProject.name='todo'
include 'todoItem'
include 'domain'
- 統(tǒng)一配置java插件
allprojects {
// 所有項目都用到了java插件,和指定的java1.8版本跷乐,子項目里面的build.gradle里面就可以刪除這兩句話肥败,而在主項目里面統(tǒng)一配置
apply plugin: 'java'
sourceCompatibility = 1.8
}
- 統(tǒng)一添加日志組件
subprojects {
// 把repositories和dependencies加載的資源合并在subprojects方法里面,
// 供子組件一起使用愕提,子組件就不需要在配置這些東西了
repositories {
mavenCentral()
}
dependencies {
implementation 'org.hibernate:hibernate-core:3.6.3.Final'
implementation 'org.log4s:log4s-testing_sjs0.6_2.13.0-M5:1.7.0'
testRuntime group: 'junit', name: 'junit', version: '4.12'
}
}
統(tǒng)一配置group和version
再根目錄里面創(chuàng)建gradle.properties文件馒稍,在文件里面提出
group 'com.todo'
version '1.0-SNAPSHOT'
全部組件就都是這個名稱和版本了發(fā)布
apply plugin: 'maven-public' //發(fā)布插件
publishing{
publications {
// 定義函數(shù)名稱,然后發(fā)布執(zhí)行
myPublish(MavenPublication){
from components.java
}
}
repositories{
maven{
// 發(fā)布的名稱和地址
name: "myrepo"
url: "
}
}
}