当前位置: 首页 > article >正文

java构建工具之Gradle

自定义任务

任务定义方式,总体分为两大类:一种是通过 Project 中的task()方法,另一种是通过tasks 对象的 create 或者register 方法。

//任务名称,闭包都作为参数println "taskA..."
task('A',{
})
//闭包作为最后一个参数可以直接从括号中拿出来println "taskB..."
task('B'){
}
//groovy语法支持省略方法括号:上面三种本质是一种
task C{
}
//action属性可以设置为闭包task(map,"D");
def map=new HashMap<String,Object>(); map.put("action",{println "taskD.."}) 
tasks.create('E'){//使用tasks的create方法println "taskE.."
}

// 基于一个存在的task来创建,类似与继承
tasks.register("copyTask", Copy) {
    from("source")
    into("target")
    include("*.war")
}

register执行的是延迟创建。也即只有当task被需要使用的时候才会被创建。

//action属性可以设置为闭包,设置task自身的行为
def map = new HashMap<String, Object>();
map.put("config", "someConfigValue")
map.put("action", { println "taskD.." })
tasks.register('task1') {
    // 配置阶段的工作
    if (map.containsKey("config")) {
        println "配置阶段: ${map.get("config")}"
    }
    
    // 给任务分组
    group("rootTask")
    // 给任务添加描述信息
    description "这是最简单的任务"
    //直接设置任务开启,默认值为true
    enabled(true)
    dependsOn = [clean]
    // 是否替换已存在的任务,默认为false
    overwrite = true
    // 基于一个存在的task来创建,类似与继承
    type = Delete
    /**
     * 提示 1 :task 的配置段是在配置阶段完成
     * 提示 2 :task 的 doFirst、doLast 方法是执行阶段完成,并且 doFirst 在 doLast 执行之前执行。
     * 提示 3 :区分任务的配置段和任务的行为,任务的配置段在配置阶段执行,任务的行为在执行阶段执行
     * */

    println "这是第一个自定义任务"
    doFirst {
        println("task1 doFirst")
    }
    doLast {
        println("task1 doLash")
    }
    // 执行阶段的工作
    doLast {
       if (map.containsKey("action")) {
           map.get("action").call()
       }
    }
}
// 先于 task1 中定义的 doFirst 执行
task1.doFirst {
    println("task1 doFirst outer")
}
// 后于 task1 中定义的 doLast 执行
task1.doLast {
    println("task1 doLast outer")
}

gradle命令分类及说明

常见任务
  • gradle build: 构建项目:编译、测试、打包等操作
  • gradle run :运行一个服务,需要application 插件支持,并且指定了主启动类才能运行
  • gradle clean: 请求当前项目的 build 目录
  • gradle init : 初始化 gradle 项目使用
  • gradle wrapper:生成wrapper 文件夹的。
    // gradle wrapper 升级wrapper 版本号
    gradle wrapper --gradle-version=4.4
    // 关联源码用项目报告相关任务
    gradle wrapper --gradle-version 5.2.1 --distribution-type all 
    
项目报告相关任务
  • gradle projects : 列出所选项目及子项目列表,以层次结构的形式显示
  • gradle tasks: 列出所选项目【当前 project,不包含父、子】的已分配给任务组的那些任务。
  • gradle tasks --all :列出所选项目的所有任务。
  • gradle tasks --group=“build setup”:列出所选项目中指定分组中的任务。
  • gradle help --task someTask :显示某个任务的详细信息
  • gradle dependencies :查看整个项目的依赖信息,以依赖树的方式显示
  • gradle properties 列出所选项目的属性列表
调试相关选项
  • -h,–help: 查看帮助信息
  • -v, --version:打印 Gradle、 Groovy、 Ant、 JVM 和操作系统版本信息。
  • -S, --full-stacktrace:打印出所有异常的完整(非常详细)堆栈跟踪信息。
  • -s,–stacktrace: 打印出用户异常的堆栈跟踪(例如编译错误)。
  • -Dorg.gradle.daemon.debug=true: 调试 Gradle 守护进程。
  • -Dorg.gradle.debug=true:调试 Gradle 客户端(非 daemon)进程。
  • -Dorg.gradle.debug.port=(port number):指定启用调试时要侦听的端口号。默认值为 5005。
性能选项:

可以在gradle.properties 中指定这些选项中的许多选项,因此不需要命令行标志

  • –build-cache, --no-build-cache: 尝试重用先前版本的输出。默认关闭(off)。
  • –max-workers: 设置 Gradle 可以使用的woker 数。默认值是处理器数。
  • -parallel, --no-parallel: 并行执行项目。有关此选项的限制,请参阅并行项目执行。默认设置为关闭(off)
守护进程选项
  • –daemon, --no-daemon: 使用 Gradle 守护进程运行构建。默认是on
  • –foreground:在前台进程中启动 Gradle 守护进程。
  • -Dorg.gradle.daemon.idletimeout=(number of milliseconds):
    Gradle Daemon 将在这个空闲时间的毫秒数之后停止自己。默认值为 10800000(3 小时)。
日志选项
  • -Dorg.gradle.logging.level=(quiet,warn,lifecycle,info,debug):
  • 通过 Gradle 属性设置日志记录级别。
    -q, --quiet: 只能记录错误信息
    -w, --warn: 设置日志级别为 warn
    -i, --info: 将日志级别设置为 info
    -d, --debug:登录调试模式(包括正常的堆栈跟踪)
其它(*)
  • -x:-x 等价于: --exclude-task : 常见gradle -x test clean build
  • –rerun-tasks: 强制执行任务,忽略up-to-date ,常见gradle build --rerun-tasks
  • –continue: 忽略前面失败的任务,继续执行,而不是在遇到第一个失败时立即停止执行。每个遇到的故障都将在构建结束时报告,常见:gradle build --continue。
  • gradle init --type pom :将maven 项目转换为gradle 项目(根目录执行)
  • gradle [taskName] :执行自定义任务

application和java插件使用场景差异

application 插件隐式应用了 java 插件

java 插件适用场景

库项目:当你开发的是一个 Java 库,只需要将代码编译、测试并打包成 JAR 文件供其他项目使用时,使用java插件就足够了。例如,开发一个工具类库,只需要提供功能接口,不需要具备可执行性。

模块开发:在大型项目中,可能会有多个模块,每个模块只负责特定的功能。对于这些模块的开发,可以使用 java 插件进行构建和管理。

application 插件适用场景

独立应用开发:当你开发的是一个独立的 Java 应用程序,如控制台应用、桌面应用或服务器应用时,使用 application插件可以方便地创建可执行的分发文件,并直接运行应用程序。

快速开发和测试:在开发过程中,使用 application 插件的 run 任务可以快速启动应用程序进行测试,提高开发效率。


http://www.kler.cn/a/522120.html

相关文章:

  • C++,STL,【目录篇】
  • cursor软件的chat和composer分别是什么
  • Qt Ribbon使用实例
  • CTF-web: Python YAML反序列化利用
  • 【数据结构】空间复杂度
  • (长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)
  • 【AI论文】FilmAgent: 一个用于虚拟3D空间中端到端电影制作自动化的多智能体框架
  • 常用的npm镜像源配置方法
  • 刀客doc:禁令影响下,TikTok广告业务正在被对手截胡
  • JVM垃圾回收器的原理和调优详解!
  • 深圳大学-智能网络与计算-实验四:云-边协同计算实验
  • Java多线程与高并发专题——保障可见性和有序性
  • 分布式组件底层逻辑是什么?
  • 在计算机上本地运行 Deepseek R1
  • Couchbase UI: Bucket
  • 小程序 uniapp 地图 自定义内容呈现,获取中心点,获取对角经纬度,首次获取对角经纬度
  • 蓝桥村打花结的花纸选择问题
  • 菜鸟之路Day08一一集合进阶(一)
  • 【数据结构】 并查集 + 路径压缩与按秩合并 python
  • vue事件总线(原理、优缺点)
  • Kafka 深入服务端 — 时间轮
  • 利用JSON数据类型优化关系型数据库设计
  • C语言字符串详解
  • 外部网关协议BGP考点
  • Vue.js组件开发-实现HTML内容打印
  • 【Elasticsearch】_reindex api请求