一些运行在ARM单板电脑上的IoT应用通常会提供RESTful风格的API接口。本次的文章记录如何在本地电脑上通过VS Code的远程开发功能,在树莓派端创建一个SpringBoot工程,并实现调试和运行。
因为之前已经实现了在X86_64平台上用VS Code新建SpringBoot工程和使用VS Code的远程开发功能在树莓进行开发。所以这次我们主要参考之前的经验,完成下面的工作。
准备工作
在树莓派上安装JDK11或更高版本
本步骤是在树莓派上执行的安装
如之前文章所述,我的树莓派2B板子的镜像是ubuntu 21.04,因此我要先检查下系统中的java版本:
$ java -version
如果你的系统显示的java jdk版本为11或者更高,可以跳过本步骤。但我的系统提示我未安装任何java程序,好在ubuntu系统给了一些安装提示,因此我只需根据提示输入想要安装的版本命令即可(其他系统可以根据实际情况安装,需要注意是需要安装JDK而非JRE):
$ sudo apt-get install -y openjdk-11-jdk-headless
安装好后再次查看java版本,已经满足要求:
$ java -version
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.21.10)
OpenJDK Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.21.10, mixed mode)
如果之前已经安装了其他版本的Java,则可以在安装新的Java版本后通过update-alternatives
命令切换Java版本。
安装VSCode远程服务器端的扩展
本步骤在本地电脑使用VSCode的远程开发能力连接到树莓派端后再进行
首先要用VSCode远程连接到树莓派。然后在Extensions功能下安装扩展到树莓派服务器端。
需要安装的远程扩展分别是Extension Pack for Java
和Spring Boot Extension Pack
如图我已经在本地端安装过Extension Pack for Java了,因此我要点击Install in SSH: x.x.x.x我的树莓派端。同理安装Spring Boot Extension Pack扩展到树莓派端。
安装完这两个扩展后切换到Extensions的SSH: x.x.x.x-INSTALLED分组可以查看远程终端上安装好的扩展。因为这两个扩展包会包含许多其他扩展,因此你会看到下列扩展都已经被自动安装上了。
在树莓派上调试SpringBoot
在安装好树莓派上的Java JDK11和相关的远程VSCode扩展后,就可以像在本地开发SpringBoot工程一样进行工作了。我们可以选择从零新建一个SpringBoot工程,或者git clone一个在其他平台已经开发好的工程。
在开发SpringBoot时我们经常遇到国外Maven仓库源下载速度慢的问题,可以通过修改为国内源解决。
在树莓派端从零新建一个SpringBoot起始工程
大体步骤与之前的文章一致:Ubuntu下使用VS Code创建Spring Boot工程
- 在VSCode远程连接到树莓派端后,打开命令台(
Ctrl+Shift+P
或F1
),输入spring会显示可用的SpringBoot命令,选择Spring Initializr: Create a Maven Project即可。 - 选择SpringBoot版本,根据需求选择即可,这里我选的是2.5.9,也可以选择较高的版本,只是我比较担心有些依赖会不支持较高的版本。
- 接下来选择开发语言,我用的是java。
- 然后设置包名和项目名(GroupId和ArtifactID),分别代表
项目组织唯一标识符
和项目唯一的标识符
。 - 选择打包类型未Jar
- 选择Java版本为11,当然也有其他选项,由于VSCode的SpringBoot扩展包要求最低版本为11,因此我之前选择配置JDK11。这个版本限制可以通过安装低版本的扩展解决。
- 接下来选择初始工程的依赖,根据需求选择即可。
- 最后选择工程保存的目录以完成创建。啰嗦下哈:这里选择的目录是树莓派端的保存目录,虽然我们此时是在本地电脑上的VSCode界面,但是实际正在远程连接树莓派端
或者打开一个已有的工程
也可以直接clone我之前在x86_64平台系统上创建的示例工程,然后直接打开:
$ git clone https://github.com/congtou001/springboot-demo.git
由于该工程引用了Lombok依赖,并且使用了@Data注释,打开该工程后发现注释无法正常使用。可能时你的VSCode远程服务器端没有安装Lombok扩展,需要安装该扩展后才可以正常使用注解。
调试并运行SpringBoot
这里的步骤和在本地VSCode界面一致。在EXPLORER的SPRING BOOT DASHBOARD分组下找到打开的的SpringBoot项目,点击项目名右侧的Debug按钮即可开始调试。待项目编译完并开始运行后,便可以在本地的任意浏览器打开该项目的页面了。
下图显示了在本地电脑上远程调试树莓派项目的界面。由于项目的编译和运行均是在树莓派端运行,而我的树莓派又是比较旧的2B版本,因此速度会慢不少。
可能遇到的问题: 我在第一次调试该项目的时候直接导致树莓派的1G内存瞬间跑满,结果卡死了远程服务。我的解决方案是为树莓派的ubuntu系统创建了一个1G大小的swap交换内存。
下图是在树莓派2B端运行SpringBoot demo工程的api接口返回结果
遇到的问题
修改maven源镜像到国内
由于Maven默认的settings.xml使用官方仓库地址,因此国内下载依赖很慢,可以按照以下步骤配置为国内镜像地址。
首先找到默认的settings.xml文件,如果是linux系统下,一般是在用户目录的.m2文件夹内:~/.m2/settings.xml
。如果没有,可以新建一个。
然后打开或新建该.xml配置文件来设定国内镜像地址,在<mirrors>标签内配置:
<mirror>
<id>aliyun-public</id>
<mirrorOf>*</mirrorOf>
<name>aliyun public</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>aliyun-central</id>
<mirrorOf>*</mirrorOf>
<name>aliyun central</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>aliyun-spring</id>
<mirrorOf>*</mirrorOf>
<name>aliyun spring</name>
<url>https://maven.aliyun.com/repository/spring</url>
</mirror>
<mirror>
<id>aliyun-spring-plugin</id>
<mirrorOf>*</mirrorOf>
<name>aliyun spring-plugin</name>
<url>https://maven.aliyun.com/repository/spring-plugin</url>
</mirror>
<mirror>
<id>aliyun-apache-snapshots</id>
<mirrorOf>*</mirrorOf>
<name>aliyun apache-snapshots</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
<mirror>
<id>aliyun-google</id>
<mirrorOf>*</mirrorOf>
<name>aliyun google</name>
<url>https://maven.aliyun.com/repository/google</url>
</mirror>
<mirror>
<id>aliyun-gradle-plugin</id>
<mirrorOf>*</mirrorOf>
<name>aliyun gradle-plugin</name>
<url>https://maven.aliyun.com/repository/gradle-plugin</url>
</mirror>
<mirror>
<id>aliyun-jcenter</id>
<mirrorOf>*</mirrorOf>
<name>aliyun jcenter</name>
<url>https://maven.aliyun.com/repository/jcenter</url>
</mirror>
<mirror>
<id>aliyun-releases</id>
<mirrorOf>*</mirrorOf>
<name>aliyun releases</name>
<url>https://maven.aliyun.com/repository/releases</url>
</mirror>
<mirror>
<id>aliyun-snapshots</id>
<mirrorOf>*</mirrorOf>
<name>aliyun snapshots</name>
<url>https://maven.aliyun.com/repository/snapshots</url>
</mirror>
<mirror>
<id>aliyun-grails-core</id>
<mirrorOf>*</mirrorOf>
<name>aliyun grails-core</name>
<url>https://maven.aliyun.com/repository/grails-core</url>
</mirror>
<mirror>
<id>aliyun-mapr-public</id>
<mirrorOf>*</mirrorOf>
<name>aliyun mapr-public</name>
<url>https://maven.aliyun.com/repository/mapr-public</url>
</mirror>
重新编译或调试就会从国内maven镜像仓库下载依赖了。
为树莓派端新建SWAP交换内存
添加swap文件:
$ mkdir swap
$ cd swap
$ sudo dd if=/dev/zero of=sfile bs=1024 count=1000000
转化并激活为swap文件:
$ sudo mkswap sfile
$ sudo swapon sfile
@Data注解无效
若添加了Lombok依赖后依然无法使用@Data等注解自动生成Setter和Getter,则可能是VSCode忘了安装扩展Lombok Annotations Support for VS Code
。在Extensions中安装该扩展即可。注意区分是安装到本地还是远程。
本文参考
同时发布于:在树莓派上开发SpringBoot 之使用VSCode远程开发