使用Gradle的方法
我需要使用Spring Framework作为工作中的一个必备技能。在选择一个可用的构建系统时,我选择了Maven和Gradle,这次我尝试选择了Gradle。由于我在Java方面已经相当久没有接触了,我发现自己对Gradle并不是很了解,所以我决定认真地进行一些教程和阅读官方文档的工作,作为自己的备忘,我想把这些写下来。
意图
本次目的在于Spring Boot的REST API项目中,能够实现以下事项。
-
- プロジェクトの雛形を作る
-
- ビルドを実施する
- パスの通った場所に設定ファイル (XML ファイル) を置く必要があり、そのファイルを、設定ファイルのパスの通ったところにコピーすること。jar になる場合は、Jar に含めること。
资源
-
- Building a RESTful Web Service with Spring Boot Actuator
- Building Java Projects with Gradle
1. 安装Gradle.
在Mac中,可以使用Brew进行安装。而在Windows中,官方推荐的是下载并设置路径,但也可以使用Chocorately安装。
苹果电脑
brew install gradle
Windows -> Windows操作系统 (Windows operating system)
choco install gradle
顺便说一下,在Gradle中,有一个叫做Gradle Wrapper的工具,它可以自动下载并配置Gradle,使用者不需要自己安装Gradle,只需要使用这个Wrapper即可,不必进行安装。
创建项目的模板
2.1. 创建目录
创建原型始于创建 build.gradle 文件。对于 Spring Boot 项目,需要创建存放源代码的目录。例如,创建以下内容:-p 为创建目录和选项。
mkdir -p src/main/java/hello
2.2. 创建构建文件
如果你要从零开始创建项目,gradle init 工具提供了一些模板供你使用。对于 Spring Boot 项目来说,建议从官方提供的模板开始。
构建.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.5.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
bootJar {
baseName = 'gs-actuator-service'
version = '0.1.0'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-actuator")
testCompile("org.springframework.boot:spring-boot-starter-test")
testCompile("junit:junit")
}
我来解释一下各个部件。
2.2.1. 描述构建脚本所依赖的库
不是在项目中,而是在build.gradle文件本身中编写必需库的说明。在这里,我们可以看到指定了Maven库,并将spring-boot-gradle-plugin添加为依赖。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.5.RELEASE")
}
}
2.2.2. 插件
build.gradle使用Groovy编写。顺便一提,也可以使用Kotlin格式编写。基本行为是以Task作为脚本的执行单位,实际上是Java类。这个DSL就是这个文件。可以执行这个Task,也可以定义其依赖关系并使用它。
插件用于使用他人先前创建的任务集合。
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
2.2.3. 可启动的Jar文件的定义
在这里有一些说明,你可以创建一个以 java -jar xxx 格式启动服务器的jar文件。如果查看BootJar,就可以了解这个配置。这里指定了jar文件的名称和版本。除此之外还可以进行其他与打包相关的设置。
Spring Boot Gradle插件参考指南
bootJar {
baseName = 'gs-actuator-service'
version = '0.1.0'
}
在这个教程中,你可以使用这个模板来构建Spring Boot的REST API的构建文件。
2.2.4. 其他属性
sourceCompatibility 表示 Java 编译时的版本要求。
targetCompatibility 表示要创建的类的版本指定。
也许Java可以创建旧版本的类文件。通常情况下是相同的。
- JavaPlugin – Other convention prperties
sourceCompatibility = 1.8
targetCompatibility = 1.8
2.2.5. 项目的依赖关系
刚才是关于脚本本身的,但这里是添加项目所需的依赖关系的地方。当想要在自己的项目中添加库时,请使用这里。注意,在buildscript中添加不会将其作为项目的依赖关系。
repositories {
mavenCentral()
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-actuator")
testCompile("org.springframework.boot:spring-boot-starter-test")
testCompile("junit:junit")
}
2.2.6. 将配置文件移到有效的类路径位置上
在构建时,需要将xml文件放置在类路径上。我需要研究一下在构建过程中如何复制它。当添加了这样一个条目时,xml文件将被复制到资源目录下。顺便提一下,当它变成Jar文件时,它将被放置在Jar文件的类路径下。
sourceSets.main.resources {
srcDirs = ['src/main/java']
include '**/*.xml'
}
在这里,”Resources”目录是什么意思呢?它是由Java插件定义的,是放置像XML属性文件一样的生产资源的地方。虽然有默认设置,但通过修改Source sets可以进行更改。默认情况下,位置是[src/$name/resources]。
2.3. 各种命令 (Gè
在这种状态下,如果我们创建代码,就能够使项目能够进行构建,但我们还需要查看其他方便的命令。
2.3.1. 进行构建
gradle build
2.3.2. 创建Gradle Wrapper
创建GradleWrapper,以使使用者无需安装Gradle便可使用它。
gradle wrapper --gradle-version 5.0
从下一次开始,您将能够使用gradlew命令。这将消除用户需要安装Gradle的要求。
gradlew build
2.3.3. 执行 Spring Boot
如果要执行Spring Boot,
gradle bootRun
好的,或者说,只需执行构建的 jar 文件即可。
gradle build
java -jar build/libs/gs-actuator-service-0.1.0.jar
调查可用的任务。
使用Gradle tasks可以创建可用任务的参考。
$ gradle tasks
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.
Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'libs'.
components - Displays the components produced by root project 'libs'. [incubating]
dependencies - Displays all dependencies declared in root project 'libs'.
dependencyInsight - Displays the insight into a specific dependency in root project 'libs'.
dependentComponents - Displays the dependent components of components in root project 'libs'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'libs'. [incubating]
projects - Displays the sub-projects of root project 'libs'.
properties - Displays the properties of root project 'libs'.
tasks - Displays the tasks runnable from root project 'libs'.
To see all tasks and more detail, run gradle tasks --all
To see more detail about a task, run gradle help --task <task>
BUILD SUCCESSFUL in 5s
1 actionable task: 1 executed
2.3.5 版本的分析
你可以用图形化的方式来分析任务。
gradle taskname --scan
2.4. 自定义任务
由于是用Java编写的,因此不需要过多解释,自定义任务只是一个简单的类。如果要组合现有的类,特别是不需要创建新的类。这是一个手动尝试操作之前的例子。现在正在创建一个复制任务,并尝试在build任务执行时强制执行它(但是,此配置下,在复制任务之后,build任务会进行清理并复制,因此相关文件将被删除)。
task copy(type:Copy) {
description 'Copies ApplicationInsights.xml to the class path dir'
from file('src/main/java/ApplicationInsights.xml')
into file('$buildDir/classes/java/main')
}
build.dependsOn copy
请查阅下方的详细信息。
- Authoring Tasks
整理
虽然只是表面上,但至少我已经能够开始使用Gradle了,所以就这样吧。