IDEA+Win10+Java11用Gradle构建SpringBoot项目并配置Docker

IDEA 使用Gradle构建Spring Boot项目并配置Docker

例程环境说明:
系统:Windows10
IDE:IntelliJ IDEA 2020.3.3 (Ultimate Edition)
Java版本:java11
构建工具:Gradle

1. 在IDEA中使用Gradle构建Spring Boot项目

打开IDEA选择File->New->Project…
在这里插入图片描述
选择Spring Initializr,Project-SDK 我们这里选择JDK11
在这里插入图片描述
在新建窗口中,依照下图填写相应的内容
在这里插入图片描述
项目依赖我们选择Spring Web和Thymeleaf
在这里插入图片描述
之后点击Next->Finished 完成项目的创建,项目创建完毕后如下图所示:
在这里插入图片描述
初次构建项目有可能会花费较多时间
项目的根目录,我们可以看到build.gradle文件,这个是项目的构建脚本,我们可以更改Maven镜像仓库来提升依赖包的下载速度。把项目的Maven镜像仓库改为国内阿里云的,下面为该项目的gradle配置

// 使用插件
plugins {
    id 'org.springframework.boot' version '2.4.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}
// 指定了生生成的编译文件的版本,默认为jar包
group = 'com.stackstone.demo'
version = '1.0.0'

// 指定编译.java文件的JDK版本
sourceCompatibility = '11'

// 使用了Maven的中央仓库(可以指定其他仓库)
repositories {
//    mavenCentral()
    // 阿里云镜像仓库
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}

// 依赖关系
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

// 测试
test {
    useJUnitPlatform()
}

新建controller包,编写HelloController.java

package com.stackstone.study.hellodocker.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {
    @GetMapping("/")
    public String hello(Model model) {
        model.addAttribute("hi", "HelloWorld!");
        return "hello";
    }
}

之后在项目中resources目录下的templates新建hello.html页面内容如下:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
<h1 th:text="${hi}"></h1>
</body>
</html>

之后运行项目
在这里插入图片描述
控制台打印如下内容表示项目启动成功:
在这里插入图片描述
浏览器访问:localhost:8080,会出现如下Hello World页面
在这里插入图片描述

利用IDEA Gradle插件打包项目

如下图所示,IDEA的Gradle插件会列举一些gradle命令,我们运行bootJar后,项目中会生成build文件夹,在libs中可以找到我们项目打包的jar包。拷贝出来后java -jar运行该jar包即可启动项目
在这里插入图片描述

以上代码例程地址:https://github.com/lt5227/gradle-docker-demo/tree/basic_demo

2. Gradle配置Docker

Gradle管理配置Docker的插件有一些,这里分别介绍两款插件的配置和使用。为了方便集成IDEA的使用,我们先配置IDEA的Docker插件。

2.1 IDEA Docker插件配置

右键下图所示的Docker图标,选择Settings
在这里插入图片描述
在General里面勾选Expose daemon on tcp://localhost:2375 without TLS之后应用重启服务
在这里插入图片描述
在IDEA中打开Docker设置面板,如下图所示勾选填写相应信息,之后测试配置,如果提示成功则说明配置正确点击OK即可。
在这里插入图片描述

2.2 com.bmuschko.docker-spring-boot-application

该插件的GIT地址:https://github.com/bmuschko/gradle-docker-plugin
插件地址:https://plugins.gradle.org/plugin/com.bmuschko.docker-spring-boot-application
根据官方文档的说明,我们将build.gradle文件更改如下:

// 使用插件
plugins {
    id 'org.springframework.boot' version '2.4.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'com.bmuschko.docker-spring-boot-application' version '6.7.0'
}
// 指定了生生成的编译文件的版本,默认为jar包
group = 'com.stackstone.demo'
version = '1.0.0'

// 指定编译.java文件的JDK版本
sourceCompatibility = '11'

// 使用了Maven的中央仓库(可以指定其他仓库)
repositories {
//    mavenCentral()
    // 阿里云镜像仓库
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}

// 依赖关系
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    docker {
        springBootApplication {
            // 使用JDK11基础镜像,如果是JDK8 使用:'openjdk:8-alpine'
            baseImage = 'adoptopenjdk/openjdk11:ubi'
            ports = [8080]
            images = ["${project.group}/${bootJar.archiveBaseName.get()}:${bootJar.archiveVersion.get()}"]
            jvmArgs = ['-Djava.security.egd=file:/dev/./urandom', '-Xmx2048m']
        }
        url = 'tcp://127.0.0.1:2375'
    }
}

// 测试
test {
    useJUnitPlatform()
}

之后在IDEA的Gradle面板重新加载项目,会出现如下所示的Tasks。
在这里插入图片描述
我们运行dockerBuildImage,初次构建时间会比较长,我这里大约花费了7分钟多。
在这里插入图片描述
构建完毕后,我们就可以在Docker Desktop中看到我们构建的image,如下所示:
在这里插入图片描述
启动的话可以在控制台输入命令:

docker run -p 8080:8080 -t com.stackstone.demo/hello:1.0.0

如下所示:
在这里插入图片描述

2.2.1 使用IDEA配置Docker插件完成项目Docker容器部署

也可以利用IDEA的docker插件进行配置启动:
选择Edit Configurations...
在这里插入图片描述
添加新的配置
在这里插入图片描述
选择Docker->Dockerfile
在这里插入图片描述
如下图所示填写相应配置信息之后点击OK
在这里插入图片描述
配置好后点击运行
在这里插入图片描述
之后我们在Services窗口可以看到如下信息:
在这里插入图片描述
表示Docker启动成功,在windows的Docker Desktop中也可以看到生成的容器
在这里插入图片描述
我们也可以选择Docker->DockerImage,按下图方式填写配置
在这里插入图片描述
图中的Image Id可以在如下所示的页面中查询到。
在这里插入图片描述
配置完后启动即可~。
以上代码Demo: https://github.com/lt5227/gradle-docker-demo/tree/docker-plugin_1

2.3 com.palantir.docker

该插件的GIT地址:https://github.com/palantir/gradle-docker
插件地址:https://plugins.gradle.org/plugin/com.palantir.docker

首先在项目中手工创建Dockerfile文件,内容如下所示

FROM adoptopenjdk/openjdk11:ubi
VOLUME /tmp
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

修改项目build.gradle

// 使用插件
plugins {
    id 'org.springframework.boot' version '2.4.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'com.palantir.docker' version '0.26.0'
}
// 指定了生生成的编译文件的版本,默认为jar包
group = 'com.stackstone.demo'
version = '1.0.0'

// 指定编译.java文件的JDK版本
sourceCompatibility = '11'

// 使用了Maven的中央仓库(可以指定其他仓库)
repositories {
//    mavenCentral()
    // 阿里云镜像仓库
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}

// 依赖关系
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

docker {
    name "${project.group}/${bootJar.archiveBaseName.get()}"
    files bootJar.archiveFile.get().asFile
    buildArgs(['JAR_FILE': "${bootJar.archiveFileName.get()}"])
}

// 测试
test {
    useJUnitPlatform()
}

之后我们点击下图所示的按钮,构建image
在这里插入图片描述
构建Docker image我们也可以自己手工输入命令

gradle build docker --info

构建成功后可以在Docker管理页面看到添加的image
在这里插入图片描述
关于部署启动可以再次参考 使用IDEA配置Docker插件完成项目Docker容器部署 小节。
以上代码Demo: https://github.com/lt5227/gradle-docker-demo/tree/docker-plugin_2

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stack Stone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值