3、第一个Gradle项目:使用gradle init创建项目、理解build.gradle文件结构、执行第一个构建任务

说实话,很多初学者学Gradle,第一步就卡在「项目怎么建」上。我当年也是,对着命令行一脸懵。其实没那么复杂,今天我就带你亲手创建第一个Gradle项目,顺便把build.gradle这个核心文件拆开揉碎了讲清楚。

3.1 使用gradle init创建项目

Gradle自带一个脚手架工具,叫gradle init。它能帮你快速生成项目骨架,省去手动创建目录的麻烦。

打开终端,找个空目录,执行:

mkdir my-first-gradle-project
cd my-first-gradle-project
gradle init

你会看到交互式问答。嗯,这里要注意,不同版本的Gradle选项略有差异,但核心流程一样。我习惯这样选:

  1. 选择项目类型:选 application(应用程序)
  2. 选择实现语言:选 Java
  3. 选择DSL语言:选 Groovy(Gradle的默认脚本语言)
  4. 选择测试框架:选 JUnit 4JUnit 5,看个人喜好
  5. 输入项目名:直接回车用默认目录名
  6. 输入包名:比如 com.example

执行完后,目录结构大概长这样:

my-first-gradle-project/
├── build.gradle          # 构建脚本,核心文件
├── settings.gradle       # 项目设置文件
├── gradlew               # Gradle Wrapper脚本(Unix)
├── gradlew.bat           # Gradle Wrapper脚本(Windows)
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
└── src/
    ├── main/
    │   ├── java/
    │   │   └── com/example/
    │   │       └── App.java
    │   └── resources/
    └── test/
        └── java/
            └── com/example/
                └── AppTest.java
小提示:gradle init 生成的代码虽然简单,但结构非常规范。我在项目中经常用它作为起点,再根据需求调整。省时省力。

3.2 理解build.gradle文件结构

打开build.gradle,你会看到类似这样的内容:

plugins {
    id 'java'
    id 'application'
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'junit:junit:4.13.2'
    implementation 'com.google.guava:guava:30.1.1-jre'
}

application {
    mainClass = 'com.example.App'
}

这个文件就是Gradle构建的「大脑」。我把它拆成四个核心部分:

3.2.1 plugins块:声明插件

插件是Gradle的扩展能力。java插件提供了编译、测试、打包Java代码的能力;application插件则让你能直接运行应用程序。说白了,插件就是帮你把重复劳动自动化了。

3.2.2 repositories块:配置仓库

仓库就是依赖的「超市」。Gradle从这里下载你声明的第三方库。mavenCentral()是最常用的公共仓库。我在公司项目里还会加上私有仓库地址,比如maven { url 'http://nexus.company.com/repository/maven-public/' }

3.2.3 dependencies块:声明依赖

这里写你的项目需要哪些外部库。格式是配置名 '组:库名:版本'。比如:

  • implementation:编译和运行时都需要,但不会暴露给使用者
  • testImplementation:只在测试代码中使用
  • compileOnly:只在编译时需要,运行时不需要(比如Lombok)
注意:我曾经在项目里把testImplementation写成了implementation,结果测试框架的依赖被打进了生产包,白白增加了体积。配置名一定要选对。

3.2.4 application块:配置入口

指定mainClass,告诉Gradle哪个类包含main方法。这样你执行gradle run时,Gradle就知道该启动谁。

3.3 执行第一个构建任务

现在项目有了,文件也理解了,我们来跑一下。Gradle提供了很多内置任务,最常用的几个:

任务名 作用
gradle build 编译、测试、打包一条龙
gradle run 编译并运行应用程序
gradle test 只运行测试
gradle clean 删除build目录,清理构建产物
gradle tasks 列出所有可用任务

执行gradle run,你会看到类似输出:

> Task :compileJava
> Task :processResources
> Task :classes
> Task :run
Hello World!

看到「Hello World!」了吗?恭喜,你的第一个Gradle项目跑起来了。

核心逻辑:Gradle的构建过程本质上是「任务依赖链」。比如run依赖classesclasses依赖compileJavaprocessResources。你执行一个任务,Gradle会自动把前置任务都跑一遍。这就是它智能的地方。

为了让你更直观地理解这个流程,我画了一张图:

Gradle构建任务依赖链 gradle run classes compileJava processResources build 箭头表示依赖关系:上层任务依赖下层任务

你想想看,如果手动做这些事——编译、复制资源、运行——得敲多少命令?Gradle一个run全搞定。这就是构建工具的价值。

我的习惯:每次新建项目,我都会先跑一遍gradle build,确保脚手架生成的代码能正常编译通过。如果报错,先检查Java版本和Gradle版本是否匹配。这是最常见的坑。

好了,第一个项目你已经亲手建起来了。build.gradle的结构也心里有数了。接下来,你就可以在这个基础上,慢慢添加自己的代码和依赖,探索更多Gradle的玩法。

公众号:蓝海资料掘金营,微信deep3321