赞
踩
选择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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。