侧边栏壁纸
  • 累计撰写 793 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

Gradle

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 143 阅读 / 1,544 字
温馨提示:
本文最后更新于 2022-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

gradlew --stop
gradlew --refresh-dependencies
gradlew build --no-daemon
A jar file in your gradle cache is corrupted. delete .gradle in your user home folder
下载的包多次复用:
需注意 maven的库的目录结构和gradle的不同,不能直接复制使用,但grdle会在配置完后自动在maven查找能用的jar复制到gradle库里.
repositories {
mavenLocal()
}
本地库地址 USER_HOME\.gradle\ 即 C:\Users\Administrator\.gradle\

java的项目自动化构建开源工具
支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。

使用方法编辑
1. 解压 ZIP 文件,本案例解压于 D:\usr\local
2. 新建环境变量 GRADLE_HOME,即 D:\usr\local\gradle-2.4;
3. 修改环境变量 Path,即追加 %GRADLE_HOME%\bin;
4. 测试是否安装成功,输入快捷键 WIN+ R,输入 cmd,在弹出的窗口输入命令行: gradle -v;
5. 创建工程所在目录,本经验创建于 c:\gdemo;
6. 创建空白的 build.gradle 文件,并打开;
7. 在第一行输入 apply plugin: ‘java’,并执行命令:gradle build。



Projects 和 tasks
projects 和 tasks是 Gradle 中最重要的两个概念。
任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。 这完全取决于你要构建些什么。举个例子,每个 project 或许是一个 jar 包或者一个 web 应用,它也可以是一个由许多其他项目中产生的 jar 构成的 zip 压缩包。一个 project 不必描述它只能进行构建操作。它也可以部署你的应用或搭建你的环境。不要担心它像听上去的那样庞大。 Gradle 的 build-by-convention 可以让您来具体定义一个 project 到底该做什么。
每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。
到目前为止,可以发现我们可以在一个 project 中定义一些简单任务,后续章节将会阐述多项目构建和多项目多任务的内容。


build.gradle
gradle 命令会从当前目录下寻找 build.gradle 文件来执行构建。我们称 build.gradle 文件为构建脚本。严格来说这其实是一个构建配置脚本,后面你会了解到这个构建脚本定义了一个 project 和一些默认的 task。

任务之间依赖
task hello << {
    println 'Hello world!'
}
task intro(dependsOn: hello) << {
    println "I'm Gradle"
}

4.times { counter ->
    task "task$counter" << {
        println "I'm task number $counter"
    }
}
task0.dependsOn task2, task3 //API添加依赖
任务顺序
<< 操作符 是 doLast
task hello << {
    println 'Hello Earth'
}
hello.doFirst {
    println 'Hello Venus'
}
hello.doLast {
    println 'Hello Mars'
}
hello << {
    println 'Hello Jupiter'
}

Output of gradle -q hello
> gradle -q hello
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter


方法抽取
Gradle 的强大要看你如何编写脚本逻辑。针对上面的例子,首先要做的就是要抽取方法。
利用方法组织脚本逻辑
build.gradle
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()
}
gradle -q loadfile 的输出结果
Output of gradle -q loadfile
\> gradle -q loadfile
I'm fond of agile.manifesto.txt
I'm fond of gradle.manifesto.txt
无论构建逻辑多复杂,Gradle 都可以提供给你一种简便的方式来组织它们。


默认任务
defaultTasks 'clean', 'run'
直接运行gradle时就会顺序执行默认任务


依赖任务的不同输出
build.gradle
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 的输出结果
Output of gradle -q distribution
\> gradle -q distribution
We build the zip with version=1.0-SNAPSHOT
gradle -q release 的输出结果
Output of gradle -q release
\> gradle -q release
We build the zip with version=1.0
We release now
whenReady 会在已发布的任务之前影响到已发布任务的执行。即使已发布的任务不是主要任务(也就是说,即使这个任务不是通过命令行直接调用)


java
在build.gradle 里加上 apply plugin: 'java'
就会多出来一些针对java的task

clean
删除 build 目录以及所有构建完成的文件。
assemble
编译并打包 jar 文件,但不会执行单元测试。一些其他插件可能会增强这个任务的功能。例如,如果采用了 War 插件,这个任务便会为你的项目打出 War 包。
check
编译并测试代码。一些其他插件也可能会增强这个任务的功能。例如,如果采用了 Code-quality 插件,这个任务会额外执行 Checkstyle。


java web
创建如下目录-文件结构这里需要特别说明,下面的目录结构与文件组织方式是gradle的java插件和war插件对于java和javaweb项目的默认约定结构,如果该项目遵守约定,则几乎不需要配置源代码文件、web.xml、测试文件等的路径,这也是体现gradle汲取了maven的优点:约定优于配置

web.xml 只要放对地方就不用配置
spplicaton.xml只要在web.xml里配置好扫描就会自动找出位置,也不用配置
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>







0

评论区