当前位置: 首页 > 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 "这是最简单的任务"//直接设置任务开启,默认值为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 任务可以快速启动应用程序进行测试,提高开发效率。

相关文章:

java构建工具之Gradle

自定义任务 任务定义方式&#xff0c;总体分为两大类:一种是通过 Project 中的task()方法,另一种是通过tasks 对象的 create 或者register 方法。 //任务名称,闭包都作为参数println "taskA..." task(A,{ }) //闭包作为最后一个参数可以直接从括号中拿出来println …...

二次封装的方法

二次封装 我们开发中经常需要封装一些第三方组件&#xff0c;那么父组件应该怎么传值&#xff0c;怎么调用封装好的组件原有的属性、插槽、方法&#xff0c;一个个调用虽然可行&#xff0c;但十分麻烦&#xff0c;我们一起来看更简便的方法。 二次封装组件&#xff0c;属性怎…...

基于Springboot用axiospost请求接收字符串参数为null的解决方案

问题 ​ 今天在用前端 post 请求后端时发现&#xff0c;由于是以 Json对象的形式传输的&#xff0c;后端用两个字符串形参无法获取到对应的参数值 前端代码如下&#xff1a; axios.post(http://localhost:8083/test/postParams,{a: 1, b:2} ,{Content-Type: application/jso…...

STM32 OLED屏配置

1.OLED简介 OLED&#xff08;Organic Light Emitting Diode&#xff09;&#xff1a;有机发光二极管 OLED显示屏&#xff1a;性能优异的新型显示屏&#xff0c;具有功耗低、相应速度快、宽视角、轻薄柔韧等特点 0.96寸OLED模块&#xff1a;小巧玲珑、占用接口少、简单易用&a…...

DiffuEraser: 一种基于扩散模型的视频修复技术

视频修复算法结合了基于流的像素传播与基于Transformer的生成方法&#xff0c;利用光流信息和相邻帧的信息来恢复纹理和对象&#xff0c;同时通过视觉Transformer完成被遮挡区域的修复。然而&#xff0c;这些方法在处理大范围遮挡时常常会遇到模糊和时序不一致的问题&#xff0…...

策略模式 - 策略模式的使用

引言 在软件开发中&#xff0c;设计模式是解决常见问题的经典解决方案。策略模式&#xff08;Strategy Pattern&#xff09;是行为型设计模式之一&#xff0c;它允许在运行时选择算法的行为。通过将算法封装在独立的类中&#xff0c;策略模式使得算法可以独立于使用它的客户端…...

Leetcode40: 组合总和 II

题目描述&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 代码思路&#xff…...

STM32完全学习——RT-thread在STM32F407上移植

一、写在前面 关于源码的下载&#xff0c;以及在KEIL工程里面添加操作系统的源代码&#xff0c;这里就不再赘述了。需要注意的是RT-thread默认里面是会使用串口的&#xff0c;因此需要额外的进行串口的初始化&#xff0c;有些人可能会问&#xff0c;为什么不直接使用CubMAX直接…...

React应用深度优化与调试实战指南

一、渲染性能优化进阶 1.1 精细化渲染控制 typescript 复制 // components/HeavyComponent.tsx import React, { memo, useMemo } from react;interface Item {id: string;complexData: {// 复杂嵌套结构}; }const HeavyComponent memo(({ items }: { items: Item[] }) &g…...

QT TLS initialization failed

qt使用QNetworkAccessManager下载文件&#xff08;给出的链接可以在浏览器里面下载文件&#xff09;&#xff0c;下载失败&#xff0c; 提示“TLS initialization failed”通常是由于Qt在使用HTTPS进行文件下载时&#xff0c;未能正确初始化TLS&#xff08;安全传输层协议&…...

全面了解 Web3 AIGC 和 AI Agent 的创新先锋 MelodAI

不管是在传统领域还是 Crypto&#xff0c;AI 都是公认的最有前景的赛道。随着数字内容需求的爆炸式增长和技术的快速迭代&#xff0c;Web3 AIGC&#xff08;AI生成内容&#xff09;和 AI Agent&#xff08;人工智能代理&#xff09;正成为两大关键赛道。 AIGC 通过 AI 技术生成…...

Golang之Context详解

引言 之前对context的了解比较浅薄&#xff0c;只知道它是用来传递上下文信息的对象&#xff1b; 对于Context本身的存储、类型认识比较少。 最近又正好在业务代码中发现一种用法&#xff1a;在每个协程中都会复制一份新的局部context对象&#xff0c;想探究下这种写法在性能…...

VSCode+Continue实现AI辅助编程

Continue是一款功能强大的AI辅助编程插件&#xff0c;可连接多种大模型&#xff0c;支持代码设计优化、错误修正、自动补全、注释编写等功能&#xff0c;助力开发人员提高工作效率与代码质量。以下是其安装和使用方法&#xff1a; 一、安装VSCode 参见&#xff1a; vscode安…...

Python 在Word中添加、或删除超链接

在Word文档中&#xff0c;超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超链接&#xff0c;用户可以轻松地导航到相关信息&#xff0c;从而增强文档的互动性和可读性。本文将介绍如何使用Python在Word中添加超链接、或删除Word文档中的超…...

Oracle迁移DM数据库

Oracle迁移DM数据库 本文记录使用达梦官方数据迁移工具DTS&#xff0c;将Oracle数据库的数据迁移至达梦数据库。 1 数据准备 2 DTS工具操作步骤 2.1 创建工程 打开DTS迁移工具&#xff0c;点击新建工程&#xff0c;填写好工程信息&#xff0c;如图&#xff1a; 2.2 新建迁…...

Spring Boot整合JavaMail实现邮件发送

一. 发送邮件原理 发件人【设置授权码】 - SMTP协议【Simple Mail TransferProtocol - 是一种提供可靠且有效的电子邮件传输的协议】 - 收件人 二. 获取授权码 开通POP3/SMTP&#xff0c;获取授权码 授权码是QQ邮箱推出的&#xff0c;用于登录第三方客户端的专用密码。适用…...

编辑器Vim基本模式和指令 --【Linux基础开发工具】

文章目录 一、编辑器Vim 键盘布局二、Linux编辑器-vim使用三、vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode) 四、vim的基本操作五、vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作…...

K8S极简教程(4小时快速学会)

1. K8S 概览 1.1 K8S 是什么 K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ 1.2 K8S核心特性 服务发现与负载均衡&#xff1a;无需修改你的应用程序即可使用陌生的服务发现机制。存储编排&#xff1a;自动挂载所选存储系统&#xff0c;包括本地存储。Secret和…...

淘宝商品数据解析的应用场景有哪些?

淘宝商品数据解析在多个领域有着广泛的应用场景&#xff0c;以下为你详细介绍&#xff1a; 电商运营与营销 选品分析&#xff1a;通过解析淘宝商品数据&#xff0c;卖家可以了解不同商品的销售情况、价格区间、市场需求热度等信息。例如分析某类商品在不同季节的销量变化&#…...

基于OpenCV实现的答题卡自动判卷系统

一、图像预处理 🌄 二、查找答题卡轮廓 📏 三、透视变换 🔄 四、判卷与评分 🎯 五、主函数 六、完整代码+测试图像集 总结 🌟 在这篇博客中,我将分享如何使用Python结合OpenCV库开发一个答题卡自动判卷系统。这个系统能够自动从扫描的答题卡中提取信…...

计网week1+2

计网 一.概念 1.什么是Internet 节点&#xff1a;主机及其运行的应用程序、路由器、交换机 边&#xff1a;通信链路&#xff0c;接入网链路主机连接到互联网的链路&#xff0c;光纤、网输电缆 协议&#xff1a;对等层的实体之间通信要遵守的标准&#xff0c;规定了语法、语义…...

如何使用tushare pro获取股票数据——附爬虫代码以及tushare积分获取方式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据 总结 一、Tushare 介绍 Tushare 是一个提供中国股市数据的API接口服务&#xff0c;它允许用户…...

vim的多文件操作

[rootxxx ~]# vim aa.txt bb.txt cc.txt #多文件操作 next #下一个文件 prev #上一个文件 first #第一个文件 last #最后一个文件 快捷键: ctrlshift^ #当前和上个之间切换 说明&#xff1a;快捷键ctrlshift^&#xff0c…...

Mac m1,m2,m3芯片使用nvm安装node14报错

使用nvm安装了node 12/16/18都没有问题&#xff0c;到14就报错了。第一次看到这个报错有点懵&#xff0c;查询资料发现是Mac芯片的问题。 Issue上提供了两个方案&#xff1a; 1、为了在arm64的Mac上安装node 14&#xff0c;需要使用Rosseta&#xff0c;可以通过以下命令安装 …...

【云安全】云原生-Docker(五)容器逃逸之漏洞利用

漏洞利用逃逸 通过漏洞利用实现逃逸&#xff0c;主要分为以下两种方式&#xff1a; 1、操作系统层面的内核漏洞 这是利用宿主机操作系统内核中的安全漏洞&#xff0c;直接突破容器的隔离机制&#xff0c;获得宿主机的权限。 攻击原理&#xff1a;容器本质上是通过 Linux 的…...

认知计算与 AI 大模型:数据仓库、数据湖与数据分析的变革力量

大家好&#xff0c;我是秉寒&#xff0c;今天是龙年腊月 27 了&#xff0c;还有两天就是蛇年除夕了&#xff0c;在此借 CSDN&#xff0c;给大家拜年&#xff01;祝愿大家在新的一年里&#xff0c;技术精进&#xff0c;工作顺遂&#xff0c;代码无 Bug&#xff0c;项目都超神&am…...

JAVA设计模式:依赖倒转原则(DIP)在Spring框架中的实践体现

文章目录 一、DIP原则深度解析1.1 核心定义1.2 现实比喻 二、Spring中的DIP实现机制2.1 传统实现 vs Spring实现对比 三、Spring中DIP的完整示例3.1 领域模型定义3.2 具体实现3.3 高层业务类3.4 配置类 四、Spring实现DIP的关键技术4.1 依赖注入方式对比4.2 自动装配注解 五、D…...

基于微信小程序的健身管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Spring Boot是什么及其优点

简介 Spring Boot是基于Spring框架开发的全新框架&#xff0c;其设计目的是简化Spring应用的初始化搭建和开发过程。 Spring Boot整合了许多框架和第三方库配置&#xff0c;几乎可以达到“开箱即用”。 优点 可快速构建独立的Spring应用。 直接嵌入Tomcat、Jetty和Underto…...

Docker 系列之 docker-compose 容器编排详解

文章目录 前言一、Docker-compose简介二、Docker-compose 的安装三、Docker-compose卸载四、Docker-compose常用命令4.1 Docker-compose命令格式4.2 docker-compose up4.3 docker-compose ps4.4 docker-compose stop4.5 docker-compose -h4.6 docker-compose down4.7 docker-co…...