文章目录
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。
面向Java应用为主。当前其支持的语言C++、Java、Groovy、Kotlin、Scala和Swift,计划未来将支持更多的语言。
1、gradle官网下载:https://gradle.org/releases/

2、解压下载Gradle包,配置环境变量
新建系统环境 GRADLE_HOME,值为gradle解压后的目录
找到path变量,后面添加 %GRADLE_HOME%\bin
3、打开cmd,输入gradle -v ,测试是否配置完成
在IDEA中创建Gradle项目时,会自动生成gradle文件夹,其中就包括 gradle-wrapper.properties ,IDEA默认使用gradle wrapper来创建项目,所以无需安装gradle也可以正常运行。
下面是配置gradle的仓库

1、Projects 和 tasks
任何一个 Gradle 构建都是由一个或多个 projects 组成。一个projects 由多个project构成,每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。
2、Gradle 脚本采用 Groovy 书写
脚本示例:build.gradle
task hello {
doLast {
println 'Hello world!'
}
}
在该文件目录下执行:gradle -q hello
以上代码可简写为
task hello {
println 'Hello world!'
}
<<在Gradle4.x中被弃用,在Gradle 5.0中被移除。
弃用以前写法:
task hello << {
println 'Hello world!'
}
dependsOn 指定依赖关系
task hello {
println 'Hello world!'
}
task intro(dependsOn: hello) {
println "I'm Gradle"
}
延迟依赖:依赖在定义之前使用,该依赖会在后面执行
task taskX(dependsOn: 'taskY') {
println 'taskX'
}
task taskY {
println 'taskY'
}
运行结果
\> gradle -q taskX
taskY
taskX

\> gradle -q task1
I'm task number 1
为已存在的任务增加行为。
4.times { counter ->
task "task$counter" {
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3
为任务增加多个行为
task hello {
println 'Hello Earth'
}
hello.doFirst {
println 'Hello Venus'
}
hello.doLast {
println 'Hello Mars'
}
hello {
println 'Hello Jupiter'
}
$hello.name 可以调用任务hello的名字
task hello {
println 'Hello world!'
}
hello.doLast {
println "Greetings from the $hello.name task."
}
新增一个叫做 myProperty 的属性,用 ext.myProperty 的方式给他一个初始值。
task myTask {
ext.myProperty = "myValue"
}
task printTaskProperties {
println myTask.myProperty
}
对 Ant 任务进行了的整合
task loadfile {
def files = file('../antLoadfileResources').listFiles().sort()
files.each { File file ->
if (file.isFile()) {
ant.loadfile(srcFile: file, property: file.name)
println " *** $file.name ***"
println "${ant.properties[file.name]}"
}
}
}
写一个方法fileList()
task checksum {
fileList('../antLoadfileResources').each {File file ->
ant.checksum(file: file, property: "cs_$file.name")
println "$file.name Checksum: ${ant.properties["cs_$file.name"]}"
}
}
task loadfile {
fileList('../antLoadfileResources').each {File file ->
ant.loadfile(srcFile: file, property: file.name)
println "I'm fond of $file.name"
}
}
File[] fileList(String dir) {
file(dir).listFiles({file -> file.isFile() } as FileFilter).sort()
}
定义默认任务
defaultTasks 'clean', 'run'
task clean {
println '默认任务1'
}
task run {
println '默认任务2'
}
task other {
println "这个不是默认任务"
}
执行
\> gradle -q
默认任务1
默认任务2
依赖任务的不同输出
task distribution << {
println "We build the zip with version=$version"
}
task release(dependsOn: 'distribution') << {
println 'We release now'
}
gradle.taskGraph.whenReady {taskGraph ->
if (taskGraph.hasTask(release)) {
version = '1.0'
} else {
version = '1.0-SNAPSHOT'
}
}
输出
\> gradle -q distribution
We build the zip with version=1.0-SNAPSHOT
\> gradle -q release
We build the zip with version=1.0
We release now
在项目目录下:gradle init

构建完成会生成相关文件

在idea中新建Gradle项目

新建一个项目gradleDemo1,如下是项目目录结构

├─.gradle
├─.idea
├─gradle // 为包装文件生成的文件夹
│ └─wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew // Gradle 包装器启动脚本
├── gradlew.bat // Gradle 包装器启动脚本
├── settings.gradle // 用于定义构建名称和子项目的设置文件
├── build.gradle // gradle 配置内容
└─src // 项目代码
├─main
│ ├─java
│ └─resources
└─test
├─java
└─resources

plugins 中配置的是gradle脚本使用到的插件。如果使用的是核心插件如 ‘java’无需指定版本,使用的是“社区插件”则必须指定version。
plugins {
id 'java'
id 'application'
id 'org.springframework.boot' version '2.3.4.RELEASE'
}
repositories 配置各种仓库示例
repositories {
mavenLocal()
maven { url 'http://192.168.1.1:80/content/groups/public' }
maven { url 'http://192.168.1.1:80/content/groups/public-snapshots' }
mavenCentral()
}
dependencies 项目依赖项示例
dependencies {
//单个依赖
implementation group: 'com.alibaba', name: 'fastjson', version: '1.2.73'
//单个依赖简写
implementation 'com.alibaba:fastjson:1.2.73'
//多个依赖
implementation 'com.alibaba:fastjson:1.2.73', 'log4j:log4j:1.2.17'
//闭包依赖,为了添加额外配置
implementation("org.mybatis:mybatis:3.5.6"){
exclude group :"org.springframework",module:"spring"
exclude group :"org.javassist",module:"javassist"
exclude group :"org.jboss.netty",module:"netty"
}
//双引号方式使用变量,在ext中声明或 def 关键字声明变量 lombok_version=具体版本
annotationProcessor "org.projectlombok:lombok:$lombok_version"
compileOnly "org.projectlombok:lombok:${lombok_version}"
}
configurations 配置全局排除依赖示例
configurations {
all{
exclude group :"org.springframework.boot",module:"spring-boot-starter-logging"
}
//编译期排除
//compile.exclude module: 'spring-boot-starter-logging'
//在构建过程中排除
//all*.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
//简写
configurations.all*.exclude module: "spring-boot-starter-logging"
buildscript 中声明的是gradle脚本自身需要使用的资源。可以声明包括变量、任务、依赖项、第三方插件、maven仓库地址等。gradle在执行脚本时会优先执行该代码块中的内容,而后执行其它脚本。
buildscript {
//变量
ext {
spring_boot_version = '2.3.4.RELEASE'
spring_dependency_management_version = '1.0.10.RELEASE'
}
//maven仓库
repositories {
mavenLocal()
maven { url 'http://192.168.1.1:80/content/groups/public' }
maven { url 'http://192.168.1.1:80/content/groups/public-snapshots' }
mavenCentral()
}
//依赖项
dependencies {
classpath "io.spring.gradle:dependency-management-plugin:${spring_dependency_management_version}"
classpath "org.springframework.boot:spring-boot-gradle-plugin:${spring_boot_version}"
}
//任务
task myTask(){
//处理任务
}
在gradle官方文档中明确指出,如果想使用依赖关系管理,那就需要使用的gradle版本大于4.4。
方式一,使用插件:
plugins {
id 'java'
//指定版本
id 'org.springframework.boot' version "2.3.4.RELEASE"
//配置依赖管理插件,自定义托管版本
id 'io.spring.dependency-management' version "1.0.10.RELEASE"
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
testImplementation "org.springframework.boot:spring-boot-starter-test"
}
方式二,使用插件,自动追加版本
plugins {
id 'java'
//指定版本
id 'org.springframework.boot' version "2.3.4.RELEASE"
}
//应用依赖管理插件,自动给插件追加版本号
apply plugin: "io.spring.dependency-management"
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
testImplementation "org.springframework.boot:spring-boot-starter-test"
}
使用 BOM 方式管理 spring-cloud依赖版本
plugins {
id 'java'
id 'org.springframework.boot' version "2.3.4.RELEASE"
id 'io.spring.dependency-management' version "1.0.10.RELEASE"
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation "org.springframework.cloud:spring-cloud-starter-config"
implementation "org.springframework.cloud:spring-cloud-starter-openfeign"
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${spring_cloud_version}"
}
}
编译乱码处理
//在 build.gradle 增加以下配置
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
跳过测试编译
//在 build.gradle 增加以下配置
gradle.taskGraph.whenReady {
tasks.each { task ->
if (task.name.contains("test")) {
task.enabled = false
}
}
}
// 1.私服账号密码
buildscript {
ext {
nexusUsername = 'admin'
nexusPassword = '12345'
}
}
// 2.配置分组,版本号
group 'com.alone.demo'
version '0.0.1-SNAPSHOT'
// 3.配置maven插件
plugins {
id 'maven'
}
//发布私服,包名为文件 settings.gradle 中 rootProject.name 配置的名称,版本为上文配置的 verison 版本号
uploadArchives {
repositories {
mavenDeployer {
//这里配置自己的私服地址
repository(url: "http://192.168.1.1:80/content/repositories/releases/") {
authentication(userName: nexusUsername, password: nexusPassword)
}
//这里配置自己的私服地址
snapshotRepository(url: "http://192.168.1.1:80/content/repositories/snapshots/") {
authentication(userName: nexusUsername, password: nexusPassword)
}
}
}
}
执行发布
gradle uploadArchives
发布本地
// 1.配置分组,版本号
group 'com.alone.demo'
version '0.0.1-SNAPSHOT'
// 3.配置maven插件
plugins {
id 'maven-publish'
}
//发布本地,包名为文件 settings.gradle 中 rootProject.name 配置的名称,版本为上文配置的 verison 版本号
publishing {
publications {
maven(MavenPublication) {
from(components.java)
}
}
}
1.通过配置全局排除冲突包(全局封杀)
//方式一
configurations {
all{
exclude group :"org.springframework.boot",module:"spring-boot-starter-logging"
}
}
//方式二 简写
configurations.all*.exclude module: "spring-boot-starter-logging"
2.诊断出具体依赖项冲突可以排除具体包
dependencies {
implementation("org.mybatis:mybatis:3.5.6"){
exclude group :"org.springframework",module:"spring"
exclude group :"org.jboss.netty",module:"netty"
}
}
3.强制指定版本策略,即在发生冲突时使用指定的版本
//冲突失败策略设置
configurations.all {
resolutionStrategy { failOnVersionConflict() }
}
//强制指定版本策略设置
dependencies {
//方式一 闭包
implementation ("io.netty:netty-all:4.0.44.Final"){
force true
}
//方式二 简写
implementation group: 'io.netty', name: 'netty-all', version: '4.0.44.Final', force: true
}
4.在平时使用动态依赖来减小发生版本冲突的几率
dependencies {
//方式一:指定某个版本以上,减小发生版本冲突的几率。如以下依赖选择 3 以上任意一个版本
implementation 'cn.afterturn:easypoi-base:3.+'
// 方式二:选择最新的版本
implementation 'cn.afterturn:easypoi-base:latest.integration'
}
gradle clean // 清理
gradle clean build // 构建打包
gradle dependencies // 查看依赖
gradle dependencies -configuration compile // 查看编译时依赖
gradle clean build -x test // 编译时跳过测试,使用 -x,-x 参数用来排除不需要执行的任务
idea可以在界面上操作

很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?