使用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 版本的分析

你可以用图形化的方式来分析任务。

Screen Shot 2019-01-01 at 12.07.06 AM.png
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了,所以就这样吧。

广告
将在 10 秒后关闭
bannerAds