远程开发?启动!

OJ项目需要用到远程开发,那今天让我们一起从0到1实现远程开发吧~

1、安装VM

这个教程自己去找吧,现在好像没有免费版本的了,需要自己找激活码

2、下载ubantu镜像

centos 停止维护了,所以用ubantu
下载地址:
https://releases.ubuntu.com/
选择18.04的稳定版本:
https://releases.ubuntu.com/bionic/

image.png

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 ,来创建一个远程部署的配置
image.png

2)配置文件同步
tools - deployment-configration
image.png

3)文件上传到虚拟机
项目根目录右键 - Deployment - Sync with Deployed to - 选择ubuntu
点击图中地方将文件传到虚拟机上,这里因为我已经传过了,所以是灰的
image.png

4)配置自动同步
这样后面就不用手动同步了
tools - deployment - Automatic Upload

5)配置本地文件删除时,虚拟机文件也删除
这样删除文件时,就不会弹窗询问你要不要把虚拟机的文件也删除了
tools - deployment - Options
image.png

运行项目

如何用windows电脑去远程操控虚拟机来运行项目呢?
答:
1)通过 idea 终端的箭头,连接上远程服务器(点击箭头就会显示你的远程主机名,连接就好了)
image.png
2)终端输入命令
springboot 是用 mvn 来启动项目
(下载依赖下载了好久,得二十分钟,注意:这里的依赖是下到了虚拟机中)

mvn spring-boot:run

出现bug: 编译成功,但是没有启动:

image.png
解决方案请看:BUG汇总第11条

部署项目

1)打包项目

mvn package

image.png

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

image.png
2)新建一个Remote JVM Debug
image.png
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)新建远程开发项目

image.png

2)点击小齿轮新建连接

image.png

3)选择连接

image.png

4)在虚拟机上安装开发工具同时在本地电脑安装客户端界面

(记得指定目录)

image.png

5)JeBrains Client 设置,启动项目

指定一下jdk版本image.png

解决执行错误的坑在下面的地方加入这个参数
-Djdk.lang.Process.launchMechanism=vfork
image.png

出现Bug : maven插件爆红

image.png

(过了几天重新打开就好了)
成功启动
image.png

  • 32
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值