选择gradle和jar包方式创建
选择需要的依赖引入
完成后的目录结构
完成后需要对build.gradle文件进行配置
//引入的插件
plugins {
id 'org.springframework.boot' version '2.4.5'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
//设置编码格式
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
group = 'com.example'
version = '0.0.1'
//编译后的.class文件的jdk版本
sourceCompatibility = '11'
//项目运行版本
targetCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
//远程仓库,可以修改成阿里的仓库
repositories {
maven {
url "https://maven.aliyun.com/repository/public/" }
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
// https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter
implementation group: 'com.alibaba', name: 'druid-spring-boot-starter', version: '1.2.4'
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
//拷贝发布的docker jar包
task copyDockerJar(type: Copy) {
from "build/libs/${rootProject.name}-${project.version}.jar"
into 'src/main/docker'
}
bootJar {
dependsOn copyDockerJar
}
test {
useJUnitPlatform()
}
implementation 和compile 以及api的区别:
- compile旧的关键字,不推荐使用
- api和compile作用相同,支持依赖传递
- implementation 不支持依赖传递,只能在当前模块中使用
Task实际就是一连串的操作,最后得到我们需要的内容。
我们可以这么理解,Gradle是一个大的舞台,这个舞台提供了基础的能力。不同插件(java Pluging、android pluging)是不同的表演团队,提供不同的表演。这个表演就是Task。不同的Task完成不同的任务,我们根据不同的需求选择不同的Task。如果在开发中,发现系统插件给我的Task不能满足需求怎么办呢?我们也可以根据规则,编写一个属于我们自己的Task。
所以综合一下,Task分成了两种,一种是Pluging提供的,另外一种是开发者自定义的。
我们打开android studio,再最右边的便签栏可以打开当前项目的所有的task。我们接着打开build标签,我们发现了之前的任务。我们可以尝试点击一下执行相关的任务。发现和我们在命令行执行的效果是一样的。除了使用IDE查看任务外,我们也可以使用命令来查看当前项目的任务。
./gradlew tasks
如果想看个个任务的详细信息
./gradlew tasks --all
详细信息里面多了很多内容,比如说项目的依赖等信息。
我们发现这些Task很多类似名称的Task,这个是插件为我们提供的任务。
我们学会了查看当前项目的任务,我们来看看如何定义一个Task,及task的使用。
task myTask {
configure closure }
task myTask(type: SomeType) {
configure closure }
上面是task的两种定义方式,第一种是直接定义一个task,第二种是让这个task继承于某类的task,可以理解为继承。
直接定义Task
我们可以在脚本的任意位置添加以下的代码
task showMeTheMoney{
println("show me the money");
}
接着我们在终端的界面输入下面的命令
./gradlew showMeTheMoney
使用某种type来定义Task
task myCopy(type:Copy){
from './build/outputs/apk/app-noLog-free-release.apk'
into './test/'
}
接着我们在终端的界面输入下面的命令(注意你的目录可能和我的不一样,替换成你自己的目录)
./gradlew myCopy
上面的这个任务继承于Copy。
这个是Copy的所有属性,https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html。
除了Copy以外我们还有什么类型呢?
https://docs.gradle.org/current/userguide/java_plugin.html,我们可以参考Java插件的类型
注意如果有比较旧的项目,你会看到这样的写法
task showArgs << {
println "Hello World"
}
在这里<<就是doLast的缩写,注意新的版本gradle已经建议不要这么写了。
项目中可能会存在各种依赖,比如A依赖B,这时候使用dependsOn 来解决这种情况,但是需要注意一点dependsOn后面依赖的任务需要在当前任务的前面,否则可能找不到任务而报错
task copyDockerJar(type: Copy) {
from "build/libs/${rootProject.name}-${project.version}.jar"
into 'src/main/docker'
}
bootJar {
dependsOn copyDockerJar
}
还有一种写法,这种可以不分顺序
task A(dependsOn:'B'){
doFirst{
println("this is A")
}
}
task B{
doFirst{
println("this is B")
}
}
当bootJar启用的时候jar默认是失效的。
// 将依赖包复制到lib目录
task copyJar(type: Copy) {
// 清除现有的lib目录
delete "$buildDir\\libs\\lib"
//需要复制的文件
from configurations.runtime
//复制到的目标文件夹
into "$buildDir\\libs\\lib"
from configurations.compileClasspath
into "$buildDir\\libs\\lib"
}
// 拷贝配置文件
task copyConfigFile(type: Copy) {
// 清除现有的配置目录
delete "$buildDir\\libs\\config"
from('src/main/resources')
into 'build/libs/config'
}
bootJar {
// 例外所有的jar
excludes = ["*.jar"]
// lib目录的清除和复制任务
dependsOn copyJar
dependsOn copyConfigFile
// 指定依赖包的路径
manifest {
attributes "Manifest-Version": 1.0,
'Class-Path': project.configurations.compileClasspath.files.collect {
"lib/$it.name" }.join(' ')
}
}
参考文章:https://blog.csdn.net/seemygoandroid/article/details/76125299
Gradle文档资料地址 https://gradle.org/docs