Gradle作为项目构建工具,有很多与Maven相同功能,其中依赖管理是比较重要的项。
本次就来学习使用Gradle引入相关依赖。
上一篇文章【Gradle学习-创建Springboot项目】中,学习了使用不同的方式搭建Gradle-springboot项目,本片文章将在上篇的基础上,讲解Gradle的重要功能:依赖管理,
简述:在 Gradle 中,
dependencies
配置项用于指定项目所依赖的外部库或模块。官方文档:DependencyHandler
dependencies 配置项中可以包含多个依赖声明,每个依赖声明都可以指定依赖的库或模块的名称、版本、以及依赖的类型和范围。依赖声明的格式如下:
groovyimplementation 'group:name:version'
其中,implementation:表示依赖库需要在编译和运行时都可用;group 表示依赖库所属的组,name 表示依赖库的名称,version 表示依赖库的版本号。Gradle 支持使用通配符来指定版本号,例如:
groovyimplementation 'group:name:1.+'
这表示依赖库的版本号是以 1 开头的任意版本。
除了上述基本语法格式,还可以使用以下格式来指定特殊的依赖项:
groovyimplementation files('libs/foo.jar') // 从本地文件系统中引入 jar 包 implementation project(':mylibrary') // 引入另一个 Gradle 项目(多模块项目时常用)
上面的用法都是使用的implementation
关键字,使用该关键字引入的依赖表示需要在编译和运行时都可用,除此之外还有其他关键字,按依赖类型和依赖范围划分如下:
引入的依赖可以配置其传递性,Maven中也存在响应配置,Gradle中的写法如下:
groovyimplementation ('group:name:version') { transitive = true // 允许传递依赖(默认值),false:禁止传递依赖 }
上一篇文章创建好了springboot项目,如果你启动测试会发现,启动虽然成功,但立即自动结束了,这是因为没有web服务的相关依赖,导致其没有作为web服务器从而一直保持运行。
本示例为:使用implementation
引入spring-boot-starter-web
,并编写一个 http 接口用于测试。
修改build.gradle
文件中的dependencis
如下:
groovydependencies { implementation 'org.springframework.boot:spring-boot-starter', 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' }
其中多个依赖可以用
,
间隔,使用一个implementation
即可,等价于下面的配置:groovydependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' }
修改后刷新依赖(上一篇文章在项目初始化时有讲到),如果使用IDEA
,在build.gradle
文件修改后,右上角会自动出现刷新提示按钮,点击即可刷新。
细心的朋友可以发现,implementation 'org.springframework.boot:spring-boot-starter'
与上面讲到的基本语法有所区别,org.springframework.boot
是group,spring-boot-starter
是name,那么version 去哪了?
答案是:省略了
但需要注意的是,并不是所有依赖项都可以省略版本号,这里可以省略version版本号的编写,是因为在plugins
中引入了相关插件:org.springframework.boot
和io.spring.dependency-management
,这些插件中有一个重要的作用,就是维护了springframeword
众多依赖的版本。
顾名思义dependency-management
就是依赖管理的意思,如果你的某个依赖没有被这些插件所维护管理,那么引入那个依赖就必须填写版本号,否则会报错!
创建controller包,并创建TestController
类,编写代码如下:
javapackage com.example.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试 http 接口
*
* @author dingdangdog
* @date 2023/3/27 16:38
*/
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping
public String hello(String name) {
return "Hello " + name;
}
}
在src/main/resources
文件夹下创建application.yml
文件,该文件是Springboot默认的配置文件,也可以是application.properties
,写法不同而已。
application.yml内容如下
yamlserver:
port: 8080
spring:
application:
name: gradle-boot-my
以上工作完成后,运行SpringBoot的启动类即可,启动日志如下:
log"C:\Program Files\Java\jdk1.8.0_131\bin\java.exe" ... Connected to the target VM, address: '127.0.0.1:13446', transport: 'socket' . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.9) 2023-03-27 16:44:37.878 INFO 19252 --- [ main] com.example.BootApplication : Starting BootApplication using Java 1.8.0_131 on DESKTOP-M8KVEAO with PID 19252 (E:\code\DingDangDog_sapce\gradle-boot-my\build\classes\java\main started by xxhu5 in E:\code\DingDangDog_sapce\gradle-boot-my) 2023-03-27 16:44:37.882 INFO 19252 --- [ main] com.example.BootApplication : No active profile set, falling back to 1 default profile: "default" 2023-03-27 16:44:38.651 INFO 19252 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2023-03-27 16:44:38.659 INFO 19252 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2023-03-27 16:44:38.659 INFO 19252 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.71] 2023-03-27 16:44:38.754 INFO 19252 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2023-03-27 16:44:38.754 INFO 19252 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 824 ms 2023-03-27 16:44:39.051 INFO 19252 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2023-03-27 16:44:39.060 INFO 19252 --- [ main] com.example.BootApplication : Started BootApplication in 1.6 seconds (JVM running for 2.592) 2023-03-27 16:45:07.066 INFO 19252 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2023-03-27 16:45:07.066 INFO 19252 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2023-03-27 16:45:07.067 INFO 19252 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
观察日志可以看到服务以8080
端口启动成功。
浏览器访问http://localhost:8080/test?name=dingdangdog
,现象如下:
最终服务启动成功并且接口测试成功,说明依赖正确注入并使用。通过使用Gradle进行依赖注入,可以发现以下两点:
通过本文学习,对Gradle的依赖管理(引入)有了初步的认识,勉强算是迈上了一个台阶。
但还有很多不足之处,比如文中提到的依赖版本管理version
,既然引入插件可以省略部分依赖的版本号配置,那么可不可以自己实现依赖版本管理,从而省略全部版本的配置?
答案当时是可以。Maven中就可以自定义依赖管理,Gradle怎么可能不行呢!这比分知识留给有兴趣的同学自行学习吧~(挖坑😁)
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!