bingoogolapple / bingoogolapple.github.io

个人主页。同时也通过 Issues 记录学习笔记
http://www.bingoogolapple.cn
86 stars 22 forks source link

Gradle #94

Open bingoogolapple opened 8 years ago

bingoogolapple commented 8 years ago

执行流程

bingoogolapple commented 6 years ago

生命周期监听

include ':groovy', ':kotlin' include ':app' include ':dirone', ':dirone:moduleone' include ':moduletwo' project(':moduletwo').projectDir = new File(settingsDir, 'dirtwo/moduletwo')

gradle.addBuildListener(new BuildListener() { @Override void buildStarted(Gradle gradle) { log "执行阶段开始 BuildListener buildStarted" }

@Override
void settingsEvaluated(Settings settings) {
    log "①初始化阶段「1」BuildListener settingsEvaluated"
}

@Override
void projectsLoaded(Gradle gradle) {
    log "①初始化阶段「3」BuildListener projectsLoaded"
    log "①初始化阶段 END"
}

@Override
void projectsEvaluated(Gradle gradle) {
    log "③配置阶段结束后「4」BuildListener projectsEvaluated 所有模块的配置阶段都结束了"
}

@Override
void buildFinished(BuildResult result) {
    log "⑨执行阶段完毕「1」BuildListener buildFinished ${result} ${result.action}"
}

}) gradle.settingsEvaluated { Settings settings -> log "①初始化阶段「2」gradle.settingsEvaluated" } gradle.addProjectEvaluationListener(new ProjectEvaluationListener() { @Override void beforeEvaluate(Project project) { log "②配置阶段开始前「1」ProjectEvaluationListener beforeEvaluate ${project.name}" }

@Override
void afterEvaluate(Project project, ProjectState state) {
    log "③配置阶段结束后「1」ProjectEvaluationListener afterEvaluate ${project.name} ${state}"
}

}) gradle.beforeProject { Project targetProject -> log "②配置阶段开始前「2」gradle.beforeProject ${targetProject.name}" } gradle.afterProject { Project targetProject -> log "③配置阶段结束后「2」gradle.afterProject ${targetProject.name} =====> ③配置阶段结束后「3」project.afterEvaluate" } gradle.projectsEvaluated { Gradle gradle -> log "③配置阶段结束后「5」gradle.projectsEvaluated 所有模块的配置阶段都结束了" } gradle.buildStarted { Gradle gradle -> log "执行阶段开始 buildStarted" } gradle.buildFinished { BuildResult buildResult -> log "⑨执行阶段完毕「2」buildFinished ${buildResult} ${buildResult.action}" } def log(String msg) { println "lifecycle ====> settings.gradle ====> ${msg}" }

* build.gradle -> lifecycle.gradle
```groovy
/**
 * doFirst 越后添加的越先执行
 * doLast 越后添加的越后执行
 */
task testLifecycle(group: 'bga') {
    log 'testLifecycle 配置阶段 1'
    doFirst {
        log 'doFirst 1'
    }
    doFirst {
        log 'doFirst 2'
    }
    doLast {
        log 'doLast 1'
    }
    doLast {
        log 'doLast 2'
    }
    log 'testLifecycle 配置阶段 2'
}
testLifecycle.doFirst {
    log 'doFirst 3'
}
testLifecycle.doLast {
    log 'doLast 3'
}
// 配置阶段开始前
project.beforeEvaluate { Project targetProject ->
    log "project.beforeEvaluate ${project.name}"
}
// 配置阶段完毕后。afterProject 之后
project.afterEvaluate { Project targetProject ->
    log "③配置阶段结束后「3」project.afterEvaluate ${project.name}"
    testLifecycle.doFirst {
        log 'doFirst 4'
    }
    testLifecycle.doLast {
        log 'doLast 4'
    }
}
gradle.addListener(new TaskExecutionGraphListener() {
    @Override
    void graphPopulated(TaskExecutionGraph graph) {
        log "④构建好 Task 拓扑图「1」TaskExecutionGraphListener graphPopulated1 ${graph}"
    }
})
gradle.addListener(new TaskExecutionListener() {
    @Override
    void beforeExecute(Task task) {
        if (task.name == 'testLifecycle') {
            // beforeExecute 中可以设置是否可用
//            task.enabled = false
            task.doFirst {
                log 'doFirst 5'
            }
            task.doLast {
                log 'doLast 5'
            }
        }
        log "⑤执行 Task 之前「1」TaskExecutionListener beforeExecute1 ${task}"
    }

    @Override
    void afterExecute(Task task, TaskState state) {
        log "⑧执行 Task 之后「1」TaskExecutionListener afterExecute1 ${task} ${state}"
    }
})
gradle.addListener(new TaskActionListener() {
    @Override
    void beforeActions(Task task) {
        if (task.name == 'testLifecycle') {
            // beforeActions 中不可以设置是否可用
            task.doFirst {
                log 'doFirst 8'
            }
            task.doLast {
                log 'doLast 8'
            }
        }
        log "⑥执行 Task Action 之前,还能添加 Action,但不能修改 Task 是否可用 ==> TaskActionListener beforeActions ${task}"
    }

    @Override
    void afterActions(Task task) {
        log "⑦执行 Task Action 之后 ==> TaskActionListener afterActions ${task}"
    }
})
gradle.taskGraph.whenReady { TaskExecutionGraph graph ->
    log "④构建好 Task 拓扑图「2」whenReady ${graph}"
}
gradle.taskGraph.addTaskExecutionGraphListener(new TaskExecutionGraphListener() {
    @Override
    void graphPopulated(TaskExecutionGraph graph) {
        log "④构建好 Task 拓扑图「3」TaskExecutionGraphListener graphPopulated2 ${graph}"
    }
})
gradle.taskGraph.addTaskExecutionListener(new TaskExecutionListener() {
    @Override
    void beforeExecute(Task task) {
        if (task.name == 'testLifecycle') {
//            task.enabled = false
            task.doFirst {
                log 'doFirst 6'
            }
            task.doLast {
                log 'doLast 6'
            }
        }
        log "⑤执行 Task 之前「2」TaskExecutionListener beforeExecute2 ${task}"
    }

    @Override
    void afterExecute(Task task, TaskState state) {
        log "⑧执行 Task 之后「2」TaskExecutionListener afterExecute2 ${task} ${state}"
    }
})
gradle.taskGraph.beforeTask { Task task ->
    if (task.name == 'testLifecycle') {
//        task.enabled = false
        task.doFirst {
            log 'doFirst 7'
        }
        task.doLast {
            log 'doLast 7'
        }
    }
    log "⑤执行 Task 之前「3」beforeTask ${task}"
}
gradle.taskGraph.afterTask { Task task, TaskState state ->
    log "⑧执行 Task 之后「3」afterTask ${task} ${state}"
}
def log(String msg) {
    println "lifecycle ====> ${project.name} ====> ${msg}"
}

BUILD SUCCESSFUL in 0s 1 actionable task: 1 executed lifecycle ====> settings.gradle ====> ⑨执行阶段完毕「1」BuildListener buildFinished org.gradle.BuildResult@32bc9db9 Build lifecycle ====> settings.gradle ====> ⑨执行阶段完毕「2」buildFinished org.gradle.BuildResult@32bc9db9 Build

bingoogolapple commented 6 years ago

TODO

bingoogolapple commented 6 years ago

TODO

bingoogolapple commented 6 years ago

TODO

bingoogolapple commented 6 years ago
bingoogolapple commented 6 years ago

依赖管理

configurations.all {
    resolutionStrategy {
        // 强制指定一个版本
        force 'groupId:artifactId:version'
        // 当遇到版本冲突问题时让构建失败
        failOnVersionConflict()
        // 设置缓存动态依赖版本 0 秒超时
        cacheDynamicVersionsFor 0, 'seconds'
        // 配置不缓存 SNAPSHOT 版本
        cacheDynamicVersionsFor 0, 'seconds'
    }
}
configurations.compile.resolutionStrategy {
    // 强制指定一个版本
    force 'groupId:artifactId:version'
    // 当遇到版本冲突问题时让构建失败
    failOnVersionConflict()
    // 设置缓存动态依赖版本 0 秒超时
    cacheDynamicVersionsFor 0, 'seconds'
    // 配置不缓存 SNAPSHOT 版本
    cacheDynamicVersionsFor 0, 'seconds'
}
configurations {
    // 设置不编译指定分组下的指定模块
    all*.exclude group: 'groupId', module: 'artifactId'
}
configurations {
    // 设置不编译指定分组下的模块
    all*.exclude group: 'groupId'
}
dependencies {
    // 设置不编译指定分组下的指定模块
    compile('groupId:artifactId:version') {
        exclude group: 'transtiveGroupId', module: 'transtiveArtifactId'
    }
}
dependencies {
    // 设置不编译指定分组下的模块
    compile('groupId:artifactId:version') {
        exclude group: 'transtiveGroupId'
    }
}
dependencies {
    // 排除所有传递依赖
    compile('groupId:artifactId:version') {
        transitive = false
    }
}
gradle dependencies
gradle -q dependencyInsight --configuration compile --dependency slf4j-api
task printDependencies << {
    configurations.compile.each { dependency ->
        println dependency
    }
}
bingoogolapple commented 6 years ago

引用本地的 aar

repositories {
    flatDir {
        dirs 'libs'
        // 多个目录以逗号分隔,相对路径和绝对路径都可以
        // dirs '../../Meiqia_SDK_For_Android/meiqia/build/outputs/aar', '../../Meiqia_SDK_For_Android/meiqiasdk/build/outputs/aar'
    }
}
compile(name:'meiqia-release', ext:'aar')
compile(name:'meiqiasdk-release', ext:'aar')
bingoogolapple commented 3 years ago

解决 Window 系统无法删除 build 目录下 jar 包问题

lockhuntersetup.zip