在Ubuntu系统中部署Java及Spring Boot开发环境

news2024/11/28 14:30:49

选择Java及Spring Boot构建Web服务具有显著优势,Java的跨平台兼容性保证了服务可在不同操作系统上顺畅运行,而Spring Boot的成熟框架则大大简化了开发流程,减少了繁琐配置。此外,强大的社区支持、易于维护与扩展的特性、优异的性能、强大的安全性、对微服务架构的友好支持,以及便利的测试环境,都使得Java及Spring Boot成为构建稳定、高效、安全的Web服务的理想选择。

VS Code安装插件并连接服务器

Visual Studio Code连接VMware虚拟机-CSDN博客 使用VS Code连接云服务器会方便操作一些,也可以使用IDEA等工具。

安装VS Code的Java运行插件,安装完这些插件后可以快速创建Spring项目,还支持动态修改网站代码,在编写代码时

Extension Pack for Java:

  • 扩展包,其中包含了多个有用的Java开发工具。
  • 提供了丰富的Java开发功能,如代码补全、重构工具、代码格式化等。
  • 支持自动生成构造函数、getter和setter方法,以及方法返回值的自动推断等。
  • 可以通过设置快捷键来提高插件的使用效率。

Spring Boot Tools:

  • 提供了一套工具来辅助Spring Boot应用的开发。
  • 可能包括代码生成、自动补全、语法高亮等功能,以提升开发效率。
  • 可能还支持与Spring Boot相关的调试和性能分析工具。

Spring Initializr Java Support:

  • 该插件可能支持通过Spring Initializr快速生成Spring Boot项目骨架。
  • 提供了项目创建时的可选配置,如选择项目元数据、Java版本、依赖项等。
  • 简化了新项目的搭建过程,提高了开发效率。

Spring Boot Dashboard:

  • 提供了一个管理和监视Spring Boot应用程序的界面。
  • 允许启动、停止、重启和调试Spring Boot应用程序。
  • 可查看应用程序的日志和端点,并支持管理多个应用程序。
  • 集成了服务发现功能,便于浏览和连接到已发现的服务。
  • 允许配置特定的运行时配置和环境变量,以精细调整应用程序。

Red Hat Dependency Analytics :

  • 该插件可能提供项目依赖关系的深入分析,帮助开发者理解和管理项目的依赖。
  • 可能包含对依赖项的安全性、许可证和兼容性的检查。
  • 有助于识别和修复潜在的依赖问题,以确保项目的稳定性和安全性。

安装git

sudo apt install git

安装Java

我选择的Java版本是Java17,Java 17是一个LTS版本,意味着它将获得长期的官方支持和维护。

安装Java运行时环境 JRE:
JRE是在计算机操作系统之上运行的软件层,它为Java程序提供运行时支持,包括Java虚拟机(JVM)、核心类库以及Java API,JRE的主要功能是执行字节码、提供常见的类库以及访问系统资源,从而确保Java程序能够顺利运行。

sudo apt install default-jre

安装JDK:

JDK是Java语言的软件开发工具包,它包含了Java的运行环境(即JVM+Java系统类库)以及一系列供开发者使用的Java工具,JDK主要用于构建在Java平台上发布的应用程序、Applet和组件。对于开发者而言,JDK提供了开发Java程序所必需的基本工具,但不包含具体的开发软件。随着Java技术的不断发展,JDK也在不断更新和迭代,以适应新的编程需求和技术趋势。从JDK 5.0开始,Java平台被划分为多个版本,如Java SE(标准版)、Java EE(企业版,后改名为Jakarta EE)和Java ME(微型版),以满足不同领域和开发场景的需求。

sudo apt-get install openjdk-17-jdk -y

验证版本

java -version

 切换Java版本,运行命令后输入版本号即可切换:

sudo update-alternatives --config java

安装Maven

也可以使用gradle,maven我使用的更熟悉些。Maven和Gradle都是自动化构建工具,Maven是Apache软件基金会组织维护的一款自动化构建工具,专注于服务Java平台的项目构建和依赖管理,Maven使用XML文件来描述项目信息,具有强大的依赖管理能力,并能从中央仓库自动下载所需的库和插件。Gradle是一个基于Apache Ant和Apache Maven概念的开源项目自动化构建工具,支持从maven远程仓库、nexus私服、ivy仓库以及本地文件获取依赖,可以使用Groovy或Kotlin DSL来声明项目设置,而不是XML。

sudo apt install maven

添加国内镜像源,settings.xml通常在etc/maven/目录下,在srttings.xml文件的mirrors中添加:

sudo vi settings.xml
  <mirrors>  
    <!-- 阿里云Maven镜像 -->  
    <mirror>    
        <id>alimaven</id>    
        <name>aliyun maven</name>    
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>    
        <mirrorOf>central</mirrorOf>    
    </mirror>  
      
    <!-- 阻止HTTP访问的伪仓库镜像 -->  
    <mirror>  
        <id>maven-default-http-blocker</id>  
        <mirrorOf>external:http:*</mirrorOf>  
        <name>Pseudo repository to mirror external repositories initially using HTTP.      </name>  
        <url>http://0.0.0.0/</url>  
        <blocked>true</blocked>  
    </mirror>  
</mirrors>

 验证Maven版本

mvn -version

 安装SDKMAN

先安装zip和unzip

sudo apt install zip unzip

安装SDKMAN

SDKMAN类似于Python的包管理工具pip或Anaconda,但主要针对基于JVM的工具和SDK,SDKMAN允许用户在计算机上安装、管理和切换不同的软件开发工具,它特别适用于管理多个Java版本,以及其他基于JVM的语言和工具.

curl -s "https://get.sdkman.io" | bash

 新建终端,使SDKMAN生效:

source "$HOME/.sdkman/bin/sdkman-init.sh"

验证安装是否成功

sdk

安装Sprint Boot

Spring Boot能自动配置大部分常用配置,避免了手动配置的繁琐,spring boot自带Web服务器如Tomcat、Jetty,无需外部部署,适用于Web应用、RESTful服务、批处理作业等多种类型的应用程序开发。

sdk install springboot

验证Spring Boot CLI是否安装成功

spring --version

安装并连接MySQL库

在VS Code中操作MySQL数据库_vscode mysql 创建数据库-CSDN博客 可以按这个操作,在服务器中需要注意一下创建MySQL用户和赋权的问题。

sudo apt-get install mysql-server

 安装Node.js和npm

方便后续的前端页面编写

sudo apt install nodejs
sudo apt install npm

创建Spring Boot项目

在VS Code中点击快捷创建按钮

 选择构建工具

 选择 Maven

 语言选择Java

随后输入Group Id,通常Group Id是网站域名反写,Group Id 通常代表项目所属的组织或公司。在Maven项目中,它用于唯一标识项目的组织部分,没有域名也可以使用默认的Group Id.

接下来,输入项目的名称Artifact Id,再根据需要选择项目的版本、Spring Boot版本以及项目所需的依赖(如Spring Web, Spring Data JPA等)

我选择了这三个依赖:

 随后选择将项目文件放在/home/用户名的目录下,可以限制应用的访问权限,提高安全性。

cd到新建的项目目录下,可以看到项目框架已经安装完成:

编写静态页面

Spring Boot可以自动将 /src/main/resources/static 目录下的文件作为静态资源提供,只需要将页面文件放进去就可以,在static目录下创建index.html、script.js、styles.css三个文件:

<!-- index.html -->
<!DOCTYPE html>  
<html lang="zh">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <title>GGboy</title>  
    <link rel="stylesheet" href="styles.css">  
</head>  
<body>  
    <header>  
        <h1 class="colorful-title">欧耶!原来是GGboy</h1>  
    </header>  
    <main>  
        <section class="image-gallery">  
        </section> 
        <section class="character-info">  
            <h2>猪猪侠介绍</h2>  
            <p id="pigHeroIntro">猪猪侠是一个勇敢而聪明的超级英雄,他总是勇敢地面对挑战,用他的智慧和力量保护他的朋友和家园。他有一颗善良的心,总是乐于助人,深受大家的喜爱。</p>  
            <h3>Go语言介绍</h3>  
            <p id="goLangIntro">  
                Go语言是一种由猪猪侠新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:  
                <br>  
                1. 它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。  
                <br>  
                2. Go语言为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。  
                <br>  
                3. Go语言是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级。  
                <br>  
                4. Go语言完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。  
                <br>  
                按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。  
                <br>  
                Go语言是一种猪猪型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。  
            </p>  
        </section> 
    </main>  
    <script src="script.js"></script>
    <button onclick="window.location.href='https://www.csdn.net/';">快来点击小猪猪</button> 
</body>  
</html>
// script.js
document.addEventListener('DOMContentLoaded', function() {  
    const imageGallery = document.querySelector('.image-gallery');  
    const imageUrls = [  
        'https://tse3-mm.cn.bing.net/th/id/OIP-C.X7-Eyw-eFgdmIMxulVXRfAHaHa?rs=1&pid=ImgDetMain',  
        'https://tse4-mm.cn.bing.net/th/id/OIP-C.lDpdCQhVNxV6HO8qkgb3cwHaHD?w=510&h=486&rs=1&pid=ImgDetMain',  
        'https://tse2-mm.cn.bing.net/th/id/OIP-C.wLioQHhuKBlwpNl24hTLZwAAAA?w=400&h=408&rs=1&pid=ImgDetMain',  
        'https://tse1-mm.cn.bing.net/th/id/OIP-C.yTP33CZBMdATDzYMH58QyQHaHa?rs=1&pid=ImgDetMain'
    ];  
  
    imageUrls.forEach(function(imageUrl) {  
        const img = document.createElement('img');  
        img.src = imageUrl;  
        img.alt = 'GGboy靓照';  
        imageGallery.appendChild(img);  
    });  
});
/* styles.css */
 
body {  
    font-family: Arial, sans-serif;  
    margin: 0;  
    padding: 0;  
    background-color: #f2f2f2;  
}  
  
header {  
    background-color: #333;  
    color: white;  
    text-align: center;  
    padding: 20px;  
}  
 
@keyframes blink {  
    0% { opacity: 1; }  
    50% { opacity: 0; }  
    100% { opacity: 1; }  
}
  
.colorful-title {  
    font-size: 48px;  
    text-transform: uppercase;  
    letter-spacing: 2px;  
    animation: color-change 3s infinite;  
    background: linear-gradient(90deg, red, orange, yellow, green, blue, indigo, violet);  
    -webkit-background-clip: text; 
    background-clip: text; 
    -webkit-text-fill-color: transparent; 
    color: transparent;   
    animation: blink 1s linear infinite;
}  
  
@keyframes color-change {  
    0% {background-position: 0 0;}  
    50% {background-position: 100% 0;}  
    100% {background-position: 0 0;}  
}  
  
 
.image-gallery {  
    display: flex;  
    justify-content: space-between;
    align-items: center; 
    flex-wrap: nowrap; 
    padding: 10px; 
}  
  
.image-gallery img {  
    flex: 0 0 auto; 
    max-width: 20%; 
    margin: 0 10px; 
}
 
@keyframes colorChange {  
    0% { color: #ff0000; }
    20% { color: #00ff00; } 
    40% { color: #0000ff; } 
    60% { color: #ffff00; } 
    80% { color: #ff00ff; } 
    100% { color: #ff0000; } 
}  
  
#goLangIntro {  
    font-family: 'Arial', sans-serif;  
    font-size: 16px;  
    line-height: 1.6;  
    color: #333; 
    text-align: justify;  
    animation: colorChange 0.5s linear infinite;  
}  
  
#pigHeroIntro {  
    font-family: 'Arial', sans-serif;  
    font-size: 16px;  
    line-height: 1.6;  
    color: #333; 
    text-align: justify;  
    animation: colorChange 0.5s linear infinite;  
}

运行Spring Boot项目

输入命令试运行Spring Boot项目:

mvn spring-boot:run

 如果是在虚拟机运行的,在宿主机浏览器输入:

虚拟机IP:端口号
# 比如127.0.0.1:8080

 运行成功,接下来就可以编辑其他功能了

  

解决pom.xml文件报错,补全缺失的jar包

有时pom.xml文件会进行报错,原因使jar包或镜像没有设置好

这是可以输入命令清除已安装的依赖并从新安装即可:

mvn clean
mvn compile

 如仍出现报错

使用git进行版本管理并将项目上传至代码托管平台

 创建git仓库:

git init

这时会显示关于默认分支名称的提示:

hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint:   git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint:   git branch -m <name>

可以根据需要选择是否设置一个全局默认的初始分支名称,如果需要的话可以输入以下命令:

git config --global init.defaultBranch main

 这样就设置成了main分支。

将文件添加到Git仓库中进行跟踪:

git add .

添加制定文件进行跟踪为:

git add HELP.md mvnw mvnw.cmd pom.xml src

 在git中设置用户名和邮箱:

git config --global user.name "用户名"
git config --global user.email 邮箱

 提交修改:

 git commit -m "Initial commit of demo project"

随后按照使用Git将代码上传至代码托管平台GitCode_代码上传平台-CSDN博客 即可将代码上传到托管平台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1844787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

a-table 根据数据自动进行 行合并

<template><div class"chat_query_result"><button click"temp">点击</button><a-table :columns"columns" :data-source"data" bordered></a-table></div> </template><script&g…

计算机毕业设计hadoop+spark+hive游戏推荐系统 游戏数据分析可视化大屏 steam游戏爬虫 游戏大数据 大数据毕业设计 机器学习 知识图谱

游戏推荐系统开题报告 一、引言 随着信息技术和网络技术的飞速发展&#xff0c;电子游戏已成为人们日常生活中不可或缺的一部分。然而&#xff0c;面对海量的游戏资源&#xff0c;用户往往难以找到适合自己的游戏。因此&#xff0c;构建一个高效、准确的游戏推荐系统显得尤为…

C++ | Leetcode C++题解之第171题Excel表列序号

题目&#xff1a; 题解&#xff1a; class Solution { public:int titleToNumber(string columnTitle) {int number 0;long multiple 1;for (int i columnTitle.size() - 1; i > 0; i--) {int k columnTitle[i] - A 1;number k * multiple;multiple * 26;}return num…

万界星空科技MES系统中的仓库管理功能

制造执行系统&#xff08;Manufacturing Execution System&#xff0c;简称MES&#xff09;作为一种面向车间生产调度的管理信息系统&#xff0c;被广泛应用在车间作业调度和控制管理系统中&#xff0c;它以实现车间生产调度最优化为目标。同时&#xff0c;MES作为衔接ERP&…

Scikit-Learn梯度提升决策树(GBDT)

Scikit-Learn梯度提升决策树 1、梯度提升决策树(GBDT)1.1、Boosting方法1.2、GBDT的原理1.3、GBDT回归的损失函数1.4、梯度下降与梯度提升1.5、随机森林与GBDT1.6、GBDT的优缺点2、Scikit-Learn梯度提升决策树(GBDT)2.1、Scikit-Learn GBDT回归2.1.1、Scikit-Learn GBDT回归…

阿里云上构建_VPC专有网络_子网划分_原理说明_创建_释放---分布式云原生部署架构搭建006

可以看到有这种子网掩码计算工具可以使用 可以看到这个是,我们设计的一个子网 192.168.0.0/16 可以看到地址是 从192.168.0.1 到 192.168.255.254 有了子网,我们去看,可以看到在阿里云的管理后台,就有个 创建交换机.可以看到 然后指定这个交换机的网段 这里我们指定了192…

编写水文专业串口通讯软件的开发经历

编写水文专业串口通讯软件的开发经历 一、关于开发 YAC9900 水位雨量 RTU 通讯软件二、软件开发遇到的问题和困难1、开发架构的适应2、开发语言的学习3、.net core 8 架构中串口构建的难点4、YAC9900 水位雨量 RTU 通讯软件开发中的 UI 冻结 三、发现问题解决问题的具体办法1、…

会声会影2024专业免费版下载附带激活码序列号

&#x1f31f; 会声会影2024&#xff1a;你的视频编辑新伙伴&#xff01;大家好&#xff0c;今天来给你们安利一个超级棒的视频编辑软件——会声会影2024最新版本&#xff01;作为一位热爱创作的小伙伴&#xff0c;找到一款既强大又易用的视频编辑工具真的太重要了。而会声会影…

什么是嵌入式,单片机又是什么,两者有什么关联又有什么区别?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;从科普的角度&#xff0c;…

【减法网络】Minusformer:通过逐步学习残差来改进时间序列预测

摘要 本文发现泛在时间序列(TS)预测模型容易出现严重的过拟合。为了解决这个问题&#xff0c;我们采用了一种去冗余的方法来逐步恢复TS的真实值。具体来说&#xff0c;我们引入了一种双流和减法机制&#xff0c;这是一种深度Boosting集成学习方法。通过将信息聚合机制从加法转…

Java线程池七个参数详解

ThreadPoolExecutor 是JDK中的线程池实现&#xff0c;这个类实现了一个线程池需要的各个方法&#xff0c;它提供了任务提交、线程管理、监控等方法 下面是 ThreadPoolExecutor 类的构造方法源码&#xff0c;其他创建线程池的方法最终都会导向这个构造方法&#xff0c;共有7个参…

Spring Boot -- 图书管理系统(登录、展示+翻页、添加/修改图书)

文章目录 一、应用分层二、数据库的设计三、登录功能四、展示列表&#xff08;使用虚构的数据&#xff09;五、翻页 展示功能六、添加图书七、修改图书 一、应用分层 为什么我们需要应用分层&#xff1a;当代码量很多时&#xff0c;将其全部放在一起查找起来就会很麻烦&#…

通过MindSpore API实现深度学习模型

快速入门 将相应的包逐一导入到项目中&#xff0c;这是制作项目的第一步。 import mindspore from mindspore import nn from mindspore.dataset import vision, transforms from mindspore.dataset import MnistDataset 处理数据集 先从网上下载对应的数据集文件,MindSpor…

【LeedCode】二分查找算法(一)

二分查找算法的时间复杂度是O(logN) &#xff0c;更优于传统的遍历数组算法值得我们学习。 注意二分查找一般使用的前提是&#xff1a;待操作的数组的元素有某种规律也就是要有二阶性&#xff0c;二阶性就是在数组中选取一点根据该数组元素某种规律可以把数组分为两部分&#x…

Kafka基础教程

Kafka基础教程 资料来源&#xff1a;Apache Kafka - Introduction (tutorialspoint.com) Apache Kafka起源于LinkedIn&#xff0c;后来在2011年成为一个开源Apache项目&#xff0c;然后在2012年成为一流的Apache项目。Kafka是用Scala和Java编写的。Apache Kafka是基于发布-订…

2024广东省职业技能大赛云计算赛项实战——Minio服务搭建

Minio服务搭建 前言 这道题是比赛时考到的&#xff0c;没找到具体题目&#xff0c;但在公布的样题中找到了&#xff0c;虽然很短~ 使用提供的 OpenStack 云平台&#xff0c;申请一台云主机&#xff0c;使用提供的软件包安装部署 MINIO 服务并使用 systemctl 管理 Minio是一个…

SAR动目标检测系列:【4】动目标二维速度估计

在三大类杂波抑制技术(ATI、DPCA和STAP)中&#xff0c;STAP技术利用杂波与动目标在二维空时谱的差异&#xff0c;以信噪比最优为准则&#xff0c;对地杂波抑制的同时有效保留动目标后向散射能量&#xff0c;有效提高运动目标的检测概率和动目标信号输出信杂比&#xff0c;提供理…

2024华为OD机试真题- 计算三叉搜索树的高度-(C++/Python)-C卷D卷-100分

2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 定义构造三叉搜索树规则如下: 每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入。查找的规则是: 1.如果数小于节点的数减去500,则将数插入节点的左子树 2.如果数大于…

微软Azure AI更新视频翻译和语音翻译 API 功能!企业适用TTS文本转语音

很高兴与大家分享 Azure AI 语音翻译产品套件的两个重大更新&#xff01; 分别是视频翻译和增强的实时语音翻译 API。 视频翻译&#xff08;批量&#xff09; 微软宣布推出视频翻译预览版&#xff0c;这是一项突破性的服务&#xff0c;旨在改变企业本地化视频内容的方式。 随着…

STM32通过Flymcu串口下载程序

文章目录 1. Flymcu 2. 操作流程 2.1 设备准备 2.2 硬件连接 2.3 设置BOOT引脚 2.4 配置 2.5 下载程序 1. Flymcu Flymcu软件可以通过串口给STM32下载程序&#xff0c;如果没有STLINK的时候&#xff0c;就可以使用这个来烧录程序。软件不用安装&#xff0c;直接打开就行…