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 "这是最简单的任务"//直接设置任务开启,默认值为trueenabled(true)dependsOn = [clean]// 是否替换已存在的任务,默认为falseoverwrite = 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.mzph.cn/web/67154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Pytest】生成html报告中,中文乱码问题解决方案

import pytestif __name__ "__main__":# 只运行 tests 目录下的测试用例&#xff0c;并生成 HTML 报告pytest.main([-v, -s, --htmlreport.html, tests])可以以上方式生成&#xff0c;也可以在pytest.ini中设置 [pytest] addopts --htmlreport.html --self-contai…

MyBatis最佳实践:提升数据库交互效率的秘密武器

第一章&#xff1a;框架的概述&#xff1a; MyBatis 框架的概述&#xff1a; MyBatis 是一个优秀的基于 Java 的持久框架&#xff0c;内部对 JDBC 做了封装&#xff0c;使开发者只需要关注 SQL 语句&#xff0c;而不关注 JDBC 的代码&#xff0c;使开发变得更加的简单MyBatis 通…

《Java程序设计》课程考核试卷

一、单项选择题&#xff08;本大题共10个小题&#xff0c;每小题2分&#xff0c;共20分&#xff09; 1.下列用来编译Java源文件为字节码文件的工具是&#xff08; &#xff09;。 A.java B.javadoc C.jar D.javac 2…

【25考研】人大计算机考研复试该怎么准备?有哪些注意事项?

人大毕竟是老牌985&#xff0c;复试难度不会太低&#xff01;建议同学认真复习&#xff01;没有机试还是轻松一些的&#xff01; 一、复试内容 由公告可见&#xff0c;复试包含笔试及面试&#xff0c;没有机试&#xff01; 二、参考书目 官方无给出参考书目&#xff0c;可参照…

使用openwrt搭建ipsec隧道

背景&#xff1a;最近同事遇到了个ipsec问题&#xff0c;做的ipsec特性&#xff0c;ftp下载ipv6性能只有100kb, 正面定位该问题也蛮久了&#xff0c;项目没有用openwrt, 不过用了开源组件strongswan, 加密算法这些也是内核自带的&#xff0c;想着开源的不太可能有问题&#xff…

[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统

一、电源管理系统简介 电源管理系统是STM32硬件设计和系统运行的基础&#xff0c;它不仅为芯片本身提供稳定的电源&#xff0c;还通过多种电源管理功能优化功耗、延长电池寿命&#xff0c;并确保系统的可靠性和稳定性。 二、电源监控器 作用&#xff1a;保证STM32芯片工作在…

数字图像处理:实验六

uu们&#xff01;大家好&#xff0c;2025年的新年就要到来&#xff0c;咸鱼哥在这里祝大家在2025年每天开心快乐&#xff0c;天天挣大钱&#xff0c;自由自在&#xff0c;健健康康&#xff0c;万事如意&#xff01;&#xff08;要是咸鱼哥嘴笨的话&#xff0c;还望大家多多包涵…

Langchain+文心一言调用

import osfrom langchain_community.llms import QianfanLLMEndpointos.environ["QIANFAN_AK"] "" os.environ["QIANFAN_SK"] ""llm_wenxin QianfanLLMEndpoint()res llm_wenxin.invoke("中国国庆日是哪一天?") print(…

上海亚商投顾:沪指冲高回落 大金融板块全天强势 上海亚商投

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一&#xff0e;市场情绪 市场全天冲高回落&#xff0c;深成指、创业板指午后翻绿。大金融板块全天强势&#xff0c;天茂集团…

kaggle比赛入门 - House Prices - Advanced Regression Techniques(第二部分)

本文承接上一篇 1. 分析住宅类型&#xff08;BldgType&#xff09;的分布以及它们与销售价格&#xff08;SalePrice&#xff09;的关系 # 1. distribution of dwelling types and their relation to sale prices # BldgType: Type of dwellingdwelling_types df[BldgType].v…

使用shell命令安装virtualbox的虚拟机并导出到vagrant的Box

0. 安装virtualbox and vagrant [rootolx79vagrant ~]# cat /etc/resolv.conf #search 114.114.114.114 nameserver 180.76.76.76-- install VirtualBox yum install oraclelinux-developer-release-* wget https://yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-g…

【数据结构】空间复杂度

目录 一、引入空间复杂度的原因 二、空间复杂度的分析 ❥ 2.1 程序运行时内存大小 ~ 程序本身大小 ❥ 2.2 程序运行时内存大小 ~ 算法运行时内存大小 ❥ 2.3 算法运行时内存大小 ❥ 2.4 不考虑算法全部运行空间的原因 三、空间复杂度 ❥ 3.1空间复杂度的定义 ❥ 3.2 空…

MySQL--》深度解析InnoDB引擎的存储与事务机制

目录 InnoDB架构 事务原理 MVCC InnoDB架构 从MySQL5.5版本开始默认使用InnoDB存储引擎&#xff0c;它擅长进行事务处理&#xff0c;具有崩溃恢复的特性&#xff0c;在日常开发中使用非常广泛&#xff0c;其逻辑存储结构图如下所示&#xff0c; 下面是InnoDB架构图&#xf…

Redis高阶5-布隆过滤器

Redis布隆过滤器 ​ 由一个初始值都为零的bit数组和多个哈希函数构成&#xff0c;用来快速判断集合中是否存在某个元素 目的减少内存占用方式不保存数据信息&#xff0c;只是在内存中做一个是否存在的标记flag 布隆过滤器&#xff08;英语&#xff1a;Bloom Filter&#xff0…

DeepSeek学术题目选择效果怎么样?

论文选题 一篇出色的论文背后&#xff0c;必定有一个“智慧的选题”在撑腰。选题足够好文章就能顺利登上高水平期刊&#xff1b;选题不行再精彩的写作也只能“当花瓶”。然而许多宝子们常常忽视这个环节&#xff0c;把大量时间花在写作上&#xff0c;选题时却像抓阄一样随便挑一…

Docker核心命令与Yocto项目的高效应用

随着软件开发逐渐向分布式和容器化方向演进&#xff0c;Docker 已成为主流的容器化技术之一。它通过标准化的环境配置、资源隔离和高效的部署流程&#xff0c;大幅提高了开发和构建效率。Yocto 项目作为嵌入式 Linux 系统构建工具&#xff0c;与 Docker 的结合进一步增强了开发…

Qt 5.14.2 学习记录 —— 이십 QFile和多线程

文章目录 1、QFile1、打开2、读写3、关闭4、程序5、其它功能 2、多线程1、演示2、锁 3、条件变量和信号量 1、QFile Qt有自己的一套文件体系&#xff0c;不过Qt也可以使用C&#xff0c;C&#xff0c;Linux的文件操作。使用Qt的文件体系和Qt自己的一些类型更好配合。 管理写入读…

多版本并发控制:MVCC的作用和基本原理

多版本并发控制&#xff1a;MVCC的作用和基本原理 1、MVCC简介1.1 快照读与当前读的区别1.1.1 快照读1.1.2 当前读 1.2 数据库的读写问题1.3 MVCC的作用 2、MVCC实现原理之ReadView2.1 什么是ReadView2.2 ReadView的设计思路2.3 MVCC整体操作流程 1、MVCC简介 1.1 快照读与当前…

神经网络|(二)sigmoid神经元函数

【1】引言 在前序学习进程中&#xff0c;我们已经了解了基本的二元分类器和神经元的构成&#xff0c;文章学习链接为&#xff1a; 神经网络|(一)加权平均法&#xff0c;感知机和神经元-CSDN博客 在此基础上&#xff0c;我们认识到神经元本身在做二元分类&#xff0c;是一种非…

Qt中QVariant的使用

1.使用QVariant实现不同类型数据的相加 方法&#xff1a;通过type函数返回数值的类型&#xff0c;然后通过setValue来构造一个QVariant类型的返回值。 函数&#xff1a; QVariant mainPage::dataPlus(QVariant a, QVariant b) {QVariant ret;if ((a.type() QVariant::Int) &a…