Gradle 入门

181 阅读3分钟

gradlew是Gradle的包装脚本,用于在项目中执行Gradle命令,而无需手动安装Gradle。使用gradlew可以确保您的项目与特定版本的Gradle保持兼容,并简化了构建过程的设置。

初始化项目

./gradlew init

image.png 初始化的Java Application 目录结构如下所示:

image.png

├── gradle // gradle 的包装脚本
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew 
├── gradlew.bat // 同 gradlew 是 window 的启动脚本
├── settings.gradle // 定义 build 和 子项目
└── app // 同 list/ utilities/ buildSrc/ 目录是一个个项目
    ├── build.gradle // build 脚本
    └── src
        ├── main
        │   └── java 
        │       └── demo
        │           └── App.java
        └── test
            └── java 
                └── demo
                    └── AppTest.java

build 项目

./gradlew build

执行结果如下所示:

image.png

执行项目

在 app 下的 build.gradle 指定了 mainClass 内容如下所示:

image.png

其中指定的 plugin 为 gradle.demo.java-application-conventions 在 buildSrc目录下,如下所示:

image.png

从这里可以看出 gradle 支持在多个gradle 文件中添加对应的依赖,而不用将所有的内容都放在一个 build.gradle 文件中

App 代码如下所示:

image.png

./gradlew run

这里执行的实际上main函数,执行结果如下所示:

image.png

执行测试用例

如果想要执行测试函数,可以先添加对应的测试用例,如下图所示:

image.png

build.gradle 中 添加测试任务,如下所示:

image.png

执行脚本,如下所示:

./gradlew test

如果测试成功,执行结果如下所示:

image.png

如果测试失败,执行结果如下所示:

image.png

更好的方式,就是直接使用 idea 点击执行测试,如下所示:

image.png

Gradle 和 Maven 有点像,那么他们之间的区别是什么呢?

Gradle 和 Maven 的区别

  1. 开发成本:Gradle使用Groovy语言作为主要的构建脚本语言,而Maven使用XML。Groovy是一种基于JVM的动态语言,相比之下,XML更为静态和繁琐。Maven相对而言更容易上手,因为它的配置基于XML,具有一致的结构和约定。相比之下,Gradle的学习曲线可能较陡峭,因为它使用了一种更灵活的脚本语言,并提供了更多自定义选项和概念。

  2. 灵活性、可扩展性、性能:Gradle提供了更大的灵活性和可扩展性。它允许开发人员使用自定义脚本和插件来定义构建过程,可以根据项目的特定需求进行定制。相比之下,Maven的功能更为固定和预定义,更适合于传统的Java项目。由于其增量构建和高度可定制的构建过程,Gradle通常比Maven具有更快的构建速度。Gradle使用基于任务的模型,在构建过程中只执行必要的任务,可以有效地利用缓存和增量编译等技术来提高性能。

  3. 维护成本、依赖管理:Gradle和Maven都具有丰富的插件生态系统,用于支持各种功能和集成。Maven的插件生态系统更为成熟和稳定,适用于大多数Java项目。Gradle的插件生态系统则更加灵活和创新,可以支持更多语言和工具。Maven通过集中式的仓库管理依赖项,并使用坐标(groupId、artifactId、version)来唯一标识依赖项。Gradle也支持Maven的坐标格式,但它还提供了更灵活的依赖声明方式,可以直接引用本地文件、Git仓库或其他自定义的依赖源。

综上所述,Gradle和Maven都是功能强大的构建工具,选择哪个工具取决于项目的需求、开发团队的偏好和工具的特性。对于传统的Java项目和团队,Maven可能是更常见和成熟的选择。而对于需要更大灵活性和定制性的项目,以及跨多语言开发的场景,Gradle可能更适合。