在使用VSCode部署Spring Boot时遇到了困难的故事【失败经历】
概括
正如标题所示。
这是关于在VSCode中部署Spring Boot模块遇到问题并解决的备忘录。
基本上这是一个头脑不太灵活的人在环境搭建上失败的故事,请当作喝茶的点心来阅读。
目标读者
那些想要打发时间阅读的人,这并不是为了高效共享信息而写的文章。
作者的技能
-
- Spring Boot
ずいぶん昔にHello Worldくらいは表示させたような、しなかったような
Spring Boot2.x系とSpring Boot3.x系の違いは分かってない
IDEの使用歴
JavaのIDEは今までEclipse
VSCodeはjavascriptを使用するときに使ってる
その他
ぶっちゃけ、新規でアプリ作るのってあんまりやってない
英語から逃げ出したい
只需要一种选择 :
本文环境
-
- OS
Windows 11
使用IDE
VSCode(Visual Studio Code)
拡張機能(主要なもののみ)
Extension Pack for Java (Microsoft)
Spring Initializr Java Support (Microsoft)
Community Server Connectors (RedHat)
Spring Boot
3.0.2
JDK
19.0.1
ネットワーク環境
proxy環境下(色々制約があります)
那么,首先我们要添加扩展功能吧。
Java的扩展包的添加
因为VSCode已经安装好了所以不需要介绍。
※在代理环境下,如果不设置settings.json中的 http.proxy 配置,会在之后引起麻烦,所以要进行设置。
我之前没在VSCode上编写过Java代码,但是通过安装名为“Extension Pack for Java”的扩展功能,就能实现开发。
只需从左侧边栏选择扩展功能并完成安装!非常简单!
添加Spring Initializr Java支持
同样,也安装”Spring Initializr Java Support”。毫无困难!
引入Tomcat的扩展功能…咦?有点奇怪。
因为没有办法,我只好参考另一篇文章,添加了一个名为“Community Server Connectors”的内容。
那么,我们来创建一个Spring项目吧。
按下 [ctr] + [shift] + [p] 快捷键打开命令面板!
在命令面板中输入 “create” 并选择Spring Initializr:Create a Maven Project… 然后按下Enter键!
唔咁都可以揀嘅嚟嘎…… 咁就話用新嘅啫?
唔使SNAPSHOT啦,揀3.0.2啦!
随后进行各种设置。
-
- 言語選択
Java
Group Id とかProject名
適当に com.example と demo とか
パッケージタイプ
War
Java version
19
dependncies
spring-boot-starter-web
spring-boot-devtools
lombok
spring-boot-starter-thymeleaf(候補に出なかったのであとから手動で入れた)
如果在代理环境下没有进行任何设置,那么在这方面会出现pom错误。
其中一个原因是maven的settings.xml文件没有被读取。
打开VSCode的设置,并在”Maven:用户设置”中添加settings.xml文件的路径。
在代理环境下经常发生的情况是,即使有设置.xml文件,但如果在这个时候无法从仓库下载,可能会在这一时刻出现pom错误。这时,可以在maven选项卡中执行”clean”操作。
为了准备执行样本,我会编写代码的。
因为我想在浏览器上添加问候语,所以我想要新增一个类文件。
喂喂!Java导入的文件丢失了!怎么回事!
安装了「Java扩展包」,写代码时却没有导入并保存!这样就无法进行开发了!
原來如此,Java項目沒有被識別出來嗎?
按下「打開Java項目文件夾」的連結就可以了吧!?
點擊連結 > 開啟資源管理器 > 選擇文件夾
没有反应
想要表达「VSCode无法进行Java开发!完蛋了!」,但由于无法这样说下去,我们必须考虑解决方案。
验证显示「BUILD SUCCESS」。
然后,等待“JAVA PROJECT”标签加载中。
由于加载结构需要时间,所以我一边喝咖啡一边等待。
现在JAVA项目被识别了。
文件组成
按照以下方式添加文件。
─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─example
│ │ │ └─demo
│ │ │ │ DemoApplication.java
│ │ │ │ ServletInitializer.java
│ │ │ │
│ │ │ └─controller
│ │ │ HelloController.java ★追加
│ │ │
│ │ └─resources
│ │ │ application.properties
│ │ │
│ │ ├─static
│ │ └─templates
│ │ hello.html ★追加
追加的文件内容
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping(path = "/")
public String hello(Model model) {
model.addAttribute("message", "Hello VSCode for JAVA !!");
return "hello";
}
}
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Hello VSCode</title>
</head>
<body>
<h1 th:text="${message}"></h1>
</body>
</html>
我们要用Maven来制作war包。
运行「MAVEN」的clean命令。
确认是否显示了“BUILD SUCCESS”。
从“MAVEN”侧边栏中执行package操作。
确保显示“构建成功”。
确认生成目标目录,并创建war文件。
└─target
│ demo-0.0.1-SNAPSHOT.war ★コレ
│ demo-0.0.1-SNAPSHOT.war.original
好的,开始准备Tomcat!
需要将Tomcat添加到Community Server Connector中吗?
按照步骤,在侧边栏中右键点击”SERVERS”,然后选择”Community Server Connector”。
点击”Create new Server…”。
汤姆猫进不去。
无法创建服务器:扩展后端错误-无法按时下载运行时
貌似不能够在日本语环境下进行下载tomcat了……
因为不知道原因,于是我在网上四处搜索,找到了以下的页面。
简而言之,有很多类似的人,只需手动识别Tomcat即可。
顺便提一下,之后在非代理环境下,我尝试了同样的操作,顺利进行了安装,所以可能是环境的问题。
手动下载Tomcat
我从Apache Tomcat下载了Tomcat。
由于错误回避视频选择了Tomcat9系列,所以我选择了9.0.71版本。
与之前一样,右击“SERVERS”中的“Community Server Connector”。
点击“创建新服务器…”。
快部署!赶紧开始部署!
在Tomcat中添加模块
当被问到「文件」还是「解压」时,选择文件。
启动资源管理器后,选择创建的war文件。
当问到“是否要编辑可选部署参数?”时,选择是。
在文本框中输入demo.war并按Enter。
好的!启动Tomcat!
在「服务器」标签中,右键单击Tomcat。
点击启动服务器。
请确认输出标签上是否显示了以下消息。
[main] org.apache.coyote.AbstractProtocol.start プロトコルハンドラー ["http-nio-8080"] を開始しました。
[main] org.apache.catalina.startup.Catalina.start サーバーの起動 [1736] ミリ秒
访问 http://localhost:8080/,确认Tomcat已经启动。
然后,输入 http://localhost:8080/demo!但是出现了404页面……。
为什么404会出现?
我对自己的编码感到怀疑…
因为我几乎没有在Spring和Thymeleaf环境下进行过开发,所以我开始怀疑是自己的代码出错了,于是无尽地进行确认工作。
然而,无论怎么看,我都找不到代码错误。
在我数次喝咖啡休息时,我感觉我的胃快要休息不下来了。
然而,看起来动作有些奇怪。
通常情况下,当模块正常部署并且tomcat启动时,应该会显示类似于“模块已上线”的日志,但现在却没有显示出来。
当我在网上浏览时,突然看到了一篇文章。
我想引用这篇文章的最后一句话。
因此,使用Spring Boot 3.0.0创建的war文件只能在Tomcat 10.0.x或更高版本中正常运行。反之,使用Spring Boot 2.7.x或之前版本创建的war文件只能在Tomcat 9.x或之前版本中正常运行。
真的吗?
让我们先检查Tomcat端和Spring Boot端。
汤姆猫
Jakarta EE平台是Java EE平台的演进。Tomcat 10和之后的版本使用作为Jakarta EE一部分的规范进行开发。Tomcat 9和之前的版本使用作为Java EE一部分的规范进行开发。
Spring Boot 3.0 发行说明
Spring Boot 3.0已将所有依赖从Java EE迁移到Jakarta EE API。尽可能选择了与Jakarta EE 10兼容的依赖,其中包括:
<割愛>
我们还尽可能地升级了第三方jar包的最新稳定版本。这里一些明显的依赖升级包括:
<割愛>
● SnakeYAML 1.32
● Tomcat 10
● Thymeleaf 3.1.0.M2
简单来说,从Spring Boot 3开始,Java EE将更名为Jakarta EE。要小心第三方的jar包。总的来说,Tomcat是其中之一。
准备Tomcat(再次准备)
有种从这里到这边都变得无所谓而放松下来的感觉,但既然已经开始了,就试着坚持到最后吧。
获得Tomcat10
从Apache Tomcat网站下载Tomcat。
选择版本为10.1.5。
在合适的位置放置并解压zip文件。
以往一样,右键点击“服务器”中的“社区服务器连接器”。
点击“创建新服务器”。
「下载服务器?」的问题回答为「不,使用光盘上的服务器」。
选择刚刚下载的Tomcat 10.1.5。
Tomcat 不会进入 (再次)。
再次从Apache Tomcat下载Tomcat 10.0.8。
使用相同的步骤,配置Tomcat 10.0.8。
启动…然后…
点击“添加部署”,将目标war文件部署。
在命令面板上选择”服务器:启动服务器”。
当注视着「输出」选项卡上流动的文字时,那个文字突然变成了…
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.2)
敲击http://localhost:8080/demo/。
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello VSCode</title>
</head>
<body>
<h1>Hello VSCode for JAVA !!</h1>
</body>
</html>
Chinese: 最后
我轻松地开始运行示例程序,却发现自己陷得比想象中还要深。我有很多反省和尴尬的事情,但如果这个步骤能对某个人起到一点帮助,那就令人幸福了。
决定版本时不能掉以轻心…
補充
实际上,我做了更傻的事情,但因为太过愚蠢,所以省略了。另外,因为我原本就已经安装了VSCode,所以settings.json在一定程度上已经调整过了。
由于某种原因,我们决定在VSCode中进行Java开发,并在这次尝试中失败了,最终还是选择了IntelliJ作为IDE,结果徒劳无功。为了纪念这次经历,我将把它发布到互联网上,但由于过于尴尬,可能会在不久的将来删除。