OJ项目需要用到远程开发,那今天让我们一起从0到1实现远程开发吧~
文章目录
1、安装VM
这个教程自己去找吧,现在好像没有免费版本的了,需要自己找激活码
2、下载ubantu镜像
centos 停止维护了,所以用ubantu
下载地址:
https://releases.ubuntu.com/
选择18.04的稳定版本:
https://releases.ubuntu.com/bionic/
3、创建虚拟机并更改相关设置
改字体大小,语言等,更方便使用
4、下载软件
下载docker
sudo apt install docker.io
5、开启ssh服务
1)安装ssh服务器
sudo apt-get install openssh-server
2)查看ssh服务器是否已经开启
ps -ef | grep ssh
6、安装Java环境
1)安装jdk8
sudo apt install openjdk-8-jdk
2)检查 jdk8 是否安装成功
java -version
3)安装包管理工具maven
sudo apt install maven
4)检查 maven 是否安装成功
mvn -v
7、远程开发方式一远程部署
在本地电脑上写代码,通过文件同步的方式,将代码同步到虚拟机上,启动项目时,再用本地电脑连接远程服务器,通过远程执行命令的方式来编译代码,运行代码
本地电脑编写代码
就用代码沙箱项目来测试
文件同步
1)创建远程部署的配置
打开idea
tools - deployment-configration ,来创建一个远程部署的配置
2)配置文件同步
tools - deployment-configration
3)文件上传到虚拟机
项目根目录右键 - Deployment - Sync with Deployed to - 选择ubuntu
点击图中地方将文件传到虚拟机上,这里因为我已经传过了,所以是灰的
4)配置自动同步
这样后面就不用手动同步了
tools - deployment - Automatic Upload
5)配置本地文件删除时,虚拟机文件也删除
这样删除文件时,就不会弹窗询问你要不要把虚拟机的文件也删除了
tools - deployment - Options
运行项目
如何用windows电脑去远程操控虚拟机来运行项目呢?
答:
1)通过 idea 终端的箭头,连接上远程服务器(点击箭头就会显示你的远程主机名,连接就好了)
2)终端输入命令
springboot 是用 mvn 来启动项目
(下载依赖下载了好久,得二十分钟,注意:这里的依赖是下到了虚拟机中)
mvn spring-boot:run
出现bug: 编译成功,但是没有启动:
解决方案请看:BUG汇总第11条
部署项目
1)打包项目
mvn package
2)执行这个 jar 包
java -jar /home/dyz/code/target/yoj-code-sandbox-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
报错:/home/dyz/code/target/yoj-code-sandbox-0.0.1-SNAPSHOT.jar中没有主清单属性
这个错误通常是因为你的 JAR 文件缺少一个有效的主清单属性 (Main-Class),它告诉 JVM 应该从哪个类开始执行。为了生成一个可执行的 JAR 文件,你需要在 pom.xml 文件中配置 maven-jar-plugin 插件,以便在生成 JAR 文件时包含主清单属性。
1)在pom.xml中配置maven-jar-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.yupi.yojcodesandbox.YojCodeSandboxApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
2)重新打包
mvn clean package
这个命令会清理项目并重新生成包含正确主清单属性的 JAR 文件。
然后重新执行
java -jar /home/dyz/code/target/yoj-code-sandbox-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
结果有了新的报错
报错:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
at com.yupi.yojcodesandbox.YojCodeSandboxApplication.main(YojCodeSandboxApplication.java:10)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 1 more
这个错误表明你的 JAR 文件缺少 Spring Boot 的依赖。这通常是因为 Spring Boot 的依赖没有正确打包到你的 JAR 文件中。
解决方案:注释掉spring-boot-maven-plugin 中的 true
这个配置项会跳过插件的执行,意味着不会生成包含依赖的可执行 JAR 文件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.yupi.yojcodesandbox.YojCodeSandboxApplication</mainClass>
<!-- <skip>true</skip>-->
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
重新打包,重新执行,访问虚拟机ip地址:端口号/health,成了!
远程调试程序
(一般不这样使用)
1)在这里有个edit Configration
2)新建一个Remote JVM Debug
3)复制这一行参数,在执行 jar 包时添加上
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar /home/dyz/code/target/yoj-code-sandbox-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
这样就可以远程 debug 啦
远程开发方式二便捷纯远程开发
优势
Idea自带的远程开发方式,更便捷简单
实现原理
直接把所有的源代码编译运行(甚至是编译器本身),全部都放到了服务器上,以服务器为主,而本地电脑仅仅是运行了一个能操作远程服务器的界面(JeBrains Client),类似云游戏,自己的电脑不存代码,不负责代码的运行,把脏活累活都交给服务器来干,这种远程开发方式适用于自己的电脑性能不高,服务器的性能很强,开发环境需要多人协作,大家需要统一一套开发环境的场景
步骤
1)新建远程开发项目
2)点击小齿轮新建连接
3)选择连接
4)在虚拟机上安装开发工具同时在本地电脑安装客户端界面
(记得指定目录)
5)JeBrains Client 设置,启动项目
指定一下jdk版本
解决执行错误的坑在下面的地方加入这个参数
-Djdk.lang.Process.launchMechanism=vfork
出现Bug : maven插件爆红
(过了几天重新打开就好了)
成功启动