我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring Boot项目部署到Linux服务器运行报错怎么解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring Boot项目部署到Linux服务器运行报错怎么解决

这篇文章主要介绍“Spring Boot项目部署到Linux服务器运行报错怎么解决”,在日常操作中,相信很多人在Spring Boot项目部署到Linux服务器运行报错怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring Boot项目部署到Linux服务器运行报错怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一 背景

最近在用 Springboot 开发项目 A,引了小伙伴开发的模块 B,本地起服务,运行的好好的,等部署到服务器上,一运行就报错:Caused by: java.lang.ClassNotFoundException。

注:导致该错误的原因有很多,比如:包冲突、类冲突、包不存在等,我这里只列举其中一种情况,毕竟坑了我半天的时间,我觉得有必要分享出来。

二 原因

先看一个诡异的现象吧,我用别的工程 C 引用了同样的依赖 B,部署到服务器上,运行的好好的,就我这个工程不行?细看:

1)工程 C 部署到服务器上,/app/C-service/lib 下的 jar包是:

B-api-1.0.0-20191224.024308-5.jar
B-dao-1.0.0-20191223.073120-2.jar

2)工程 C 部署到服务器上,/app/C-service/C-service.jar/META-INF/MANIFEST.MF,扫描路径是:

lib/B-api-1.0.0-20191224.024308-5.jar
lib/B-dao-1.0.0-20191223.073120-2.jar

而:

1)我的工程 A 部署到服务器上,/app/A-service/lib 下的 jar包是:

B-api-1.0.0-SNAPSHOT.jar
B-dao-1.0.0-SNAPSHOT.jar

2)我的工程 A 部署到服务器上,/app/A-service/A-service.jar/META-INF/MANIFEST.MF,扫描路径是:

lib/B-api-1.0.0-20191224.024308-5.jar
lib/B-dao-1.0.0-20191223.073120-2.jar

发现:MANIFEST.MF 中扫描的 jar 包路径和实际解压出来的 jar 包名称不一致(一个带时间戳,一个是 SNAPSHOT),所以扫描不到 jar 包,导致报错:Caused by: java.lang.ClassNotFoundException。

那么是什么原因构成了这桩惨案呢?机缘巧合:

1.我小伙伴的模块,deploy 时用的是 SNAPSHOT,如 1.0.0-SNAPSHOT,我在拉取 jar包时,拉到的是:B-api-1.0.0-20191224.024308-5.jar:

<dependency>
    <groupId>com.xxx.xxx</groupId>
    <artifactId>B-api</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

2.我的工程 A 本地可以跑,是因为那时候我没有打包 mvn clean package -Dmaven.test.skip=true,IDEA 本地运行项目时 jar 包扫描路径 和 实际拉取的 jar 包一致;当我打包后,解压出 A-service.zip 包,本地运行同样会报错;

3.问题在于工程 A 打包前后的区别,为什么打包后:MANIFEST.MF 和 A-service.zip 解压后的 lib/ 目录下的 jar包 名称不一致?

4.最后通过比较工程 C 的配置文件和 A 的配置文件,找到不同点:A工程的 assembly.xml 中多了一行:<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>

<dependencySets>
    <dependencySet>
       <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>
        <useProjectArtifact>false</useProjectArtifact>
        <outputDirectory>lib</outputDirectory>
    </dependencySet>
</dependencySets>

5.把这行去掉,问题确实解决了。但是为什么呢?拉下来的 jar 包、MANIFEST.MF 中扫描的 jar包带时间戳,总觉得不够清秀、哪里不对劲。随后我以 outputFileNameMapping 为字眼找了下相关资料,果然找到了另外一位老大哥:<useUniqueVersions>false</useUniqueVersions> ,这行配置是放在工程的 Service 模块(Application.java 启动类所在模块)的 pom.xml 中:

<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>${main.class}</mainClass>
                <useUniqueVersions>false</useUniqueVersions>
            </manifest>
        </archive>
        <excludes>
            <exclude>*.yml</exclude>
            <exclude>*.properties</exclude>
        </excludes>
    </configuration>
</plugin>

6.解释:

1)<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>,作用是在你打包的时候:lib/ 下的 jar 包可以重命名,比如本来应该是 B-api-1.0.0-20191224.024308-5.jar,通过这行配置后,jar包被重命名为:B-api-1.0.0-SNAPSHOT.jar;

2)<useUniqueVersions>false</useUniqueVersions>,作用是在你生成 MANIFEST.MF 文件时,lib/ 下的 jar包如果版本是 xxx-SNAPSHOT,要不要带唯一版本时间戳,如果你配置为 false(默认为 true),那么本来应该是 B-api-1.0.0-20191224.024308-5.jar,通过这行配置后,jar包被重命名为:B-api-1.0.0-SNAPSHOT.jar;

刚好:

1)工程 C 中 outputFileNameMapping,useUniqueVersions 都没配置,使用默认值,使得 lib/ 下的 jar包名称 和 MANIFEST.MF 下的扫描路径 jar包名称一致(都带时间戳);

2)而我的工程 A,不只从哪里拷贝来的配置文件,配了 outputFileNameMapping (没带时间戳),但没配置 useUniqueVersions(带时间戳),导致不一致;

所以:这两个配置,要么都有,要么都没有,不然就会出现不一致,导致报错。

三 解决

我个人觉得,jar 包名称还是不带时间戳更清秀些,所以我推荐 outputFileNameMapping,useUniqueVersions 都配置上,如下:

1.assembly.xml 中添加配置:<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>

<dependencySets>
    <dependencySet>
        <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>
        <useProjectArtifact>false</useProjectArtifact>
        <outputDirectory>lib</outputDirectory>
    </dependencySet>
</dependencySets>

2.启动类 Application.java 所在模块的 pom.xml 中添加配置:<useUniqueVersions>false</useUniqueVersions>

<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>${main.class}</mainClass>
                <useUniqueVersions>false</useUniqueVersions>
            </manifest>
        </archive>
        <excludes>
            <exclude>*.yml</exclude>
            <exclude>*.properties</exclude>
        </excludes>
    </configuration>
</plugin>

到此,关于“Spring Boot项目部署到Linux服务器运行报错怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring Boot项目部署到Linux服务器运行报错怎么解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

云服务器项目部署失败怎么解决

云服务器项目部署失败是一种常见的问题,下面是一些解决方法:检查您的配置文件,确保它已正确更新。确保所有的硬件、操作系统和服务都与云服务器的要求相符合。重新启动您的云服务器,以便它可以运行并重新连接到服务器。检查您的网络连接,确保它是正确的。网络问题可能会导致服务器无法连接到云服务器。重新安装云服务器的应用程序和组件。有时,这些错误可能会导致错误的配置文件或者应用程序出现问题。检查并清
2023-10-26

云服务器项目部署失败怎么解决呢

云服务器项目部署失败是可能发生的情况之一,以下是一些解决方法:重新进行配置:确保您的云服务器项目的配置文件中没有错误或异常配置,可以尝试执行以下操作:确保您选择的服务器配置正确,包括服务器IP地址、数据库配置和应用程序配置。确保数据备份和恢复选项正确配置。确保使用了适当的云服务提供商提供的工具和服务。检查配置:检查云服务器项目的配置文件,确保您没有错误或异常的设置。检查配置
2023-10-26

云服务器部署node项目失败怎么解决

如果您的云服务器部署失败,请尝试以下解决方案:确认问题的根源:首先需要仔细检查问题,找出可能的问题所在,例如数据库错误、配置问题或代码错误等。重现问题:尝试重现问题,以确定是否是因为服务器配置的问题或者应用程序的问题。重启服务器:如果问题不是很严重,重启服务器将解决问题。如果问题比较严重,可以考虑将服务器迁移到其他环境,或者尝试更换服务器。检查环境:检查您的硬件和操作系统等环境是否与云
2023-10-26

云服务器部署项目缓存旧项目怎么办啊怎么解决

一、问题描述旧项目中存在缓存旧项目,这种情况通常发生在云服务器的某个组件上。这个组件可能已经使用了旧的缓存或者其他的限制因素,导致旧项目无法访问或访问速度缓慢。如果旧项目的缓存旧项目不能解决,可能会导致云服务器无法正常部署和运行。这将严重影响用户的使用体验,同时也会影响云服务器的部署和运行。解决方法清理旧项目:首先,需
2023-10-27

云服务器部署node项目失败怎么办解决

检查网络连接,确认服务器当前是否可以访问,检查是否有网络连接问题。检查内存使用情况,是否有内存不足的情况,以便能够进行处理。检查数据库连接,确保服务器能够进行数据处理,以便能够处理数据,如果出现错误,需要重新连接数据库。检查日志记录,确保服务器能够正确处理请求,并有相关日志记录,以便能够查找问题。检查服务器配置,确保服务器配置符合相关要求,以便能够处理请求,处理数据。检查服务器安全性,确保服务器安全运行,以便能够...
2023-10-27

云服务器项目部署失败怎么办啊怎么解决

如果您的云服务器项目部署失败了,请按照以下步骤进行解决:确保您的云服务器是可用的:请确保您的服务器已经连接了互联网,可以使用DNS查找到它。检查您的云服务器是否配置正确:确保云服务器的配置和操作系统版本匹配,确保您的操作系统已经安装了最新的补丁或更新。检查您的云服务器是否出现问题:如果云服务器出现了问题,请查看日志或使用命令行工具来诊断问题。检查您的备份文件是否正确:确保云服务器的数据备份文件正确,并且包含...
2023-10-27

云服务器部署项目端口被占用怎么解决

如果您的云服务器部署项目是由多台服务器组成,并且您的服务器上的网络连接被占用。那么可以考虑以下几个解决方法:禁用所有服务:确保您在云服务器上启用所有服务,并尝试将其关闭。例如,关闭所有网络服务、控制面板、安全组和其他服务。这些服务可以在控制面板中找到它们。禁用网络端口:如果您的网络端口被占用,您可以尝试禁用它们。例如,关闭所有端口80、2345和543。这些端口可以在控制面板中找到。启用
2023-10-26

云服务器项目部署失败怎么解决呢苹果

如果您的云服务器项目部署失败,您可以尝试以下解决方案:检查服务器配置。确保您的服务器正确运行,并且您对它有足够的了解。如果配置有问题,您可以尝试在互联网上搜索相关信息,或者联系云提供商以获取更多指导。重新启动设备。有时,在部署新应用之前,可能会出现意外停机时间。在这种情况下,您可以尝试重新启动设备,或者使用备份数据恢复服务器。检查服务器配置文件。查找您的应用程序依赖项(例如库、模块)以及其它配置文件,并确保它...
2023-10-27

腾讯云服务器部署java项目失败怎么解决

首先,在部署云计算服务器之前,企业需要进行详细的规划和准备工作。首先,需要确定服务器的配置、硬件规格和软件环境,以及服务器所需的系统资源和网络带宽。这包括了服务器的架构、处理器、内存、存储和网络等方面的配置,以及需要采购的硬件设备和软件系统。在此基础上,企业还需要考虑如何保证系统的稳定性和安全性,例如备份和灾备措施、数
腾讯云服务器部署java项目失败怎么解决
2023-10-28

云服务器部署node项目失败怎么解决问题

如果您的云服务器部署失败,请尝试以下解决方案:查看错误消息:首先,您需要检查您的错误消息,以确定问题发生在哪里。这些错误消息可能包含有关服务器硬件或软件的细节,例如CPU、内存、磁盘空间等等。重新启动云服务器:如果您的数据仍然存在,可以尝试重新启动云服务器。有时,这种故障可能是由于操作系统或应用程序的问题引起的。检查服务器配置:确保您的服务器配置正确,包括虚拟机、硬件组件、数据库等等。如果您在操作系统更新后仍...
2023-10-27

python服务器运行代码报错怎么解决

Python服务器运行代码报错解决方案指南,涵盖:语法错误导入错误类型错误索引错误键错误名称错误值错误系统错误环境变量错误调试技巧解决报错的方法包括检查拼写、缩进、导入、变量类型、索引范围、键存在、环境变量设置,使用调试器和日志,并寻求外部帮助。
python服务器运行代码报错怎么解决
2024-04-12

python服务器运行代码报错怎么解决

在解决Python服务器运行代码报错时,可以尝试以下几种方法:检查代码中的语法错误:确保代码中没有语法错误或拼写错误,这可能导致代码无法正确运行。检查依赖包:确保代码中使用的依赖包已经安装,并且版本与代码要求的版本匹配。检查权限:如果代码需
python服务器运行代码报错怎么解决
2024-04-09

云服务器部署项目端口被占用怎么解决呢

如果您的云服务器部署项目有一个强大的后端数据库,并且您的后端数据库使用了特定的端口来连接到其他服务,那么很有可能会受到来自其他服务或应用程序的网络请求。当您的服务或应用程序使用了特定的端口时,您需要解决此问题。以下是一些可能有用的解决方案:检查服务器上的日志文件和应用程序配置文件,以查看是否有任何端口被占用。这可以帮助您确定可能的原因,以便更好地解决问题。检查服务或应用程序是否被正确地配
2023-10-26

云服务器项目部署失败怎么解决呢苹果12

缺乏必要的资源:如果您的云服务器项目需要大量的计算资源,例如CPU、内存、存储和网络带宽,您可能需要增加资源来满足需求。这可能意味着您需要增加硬件设备或增加其他硬件组件。如果您的资源不足,则可能会导致项目延迟。配置错误:配置错误可能会导致项目部署失败。在进行云服务器项目部署之前,请务必仔细检查配置文档和设置,以确保您正
云服务器项目部署失败怎么解决呢苹果12
2023-10-27

vue项目proxyTable配置和部署服务器的问题怎么解决

这篇文章主要介绍“vue项目proxyTable配置和部署服务器的问题怎么解决”,在日常操作中,相信很多人在vue项目proxyTable配置和部署服务器的问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
2023-06-30

云服务器部署项目验证码加载失败怎么解决

如果您的云服务器部署项目验证码加载失败,可能是因为以下原因之一:服务器配置不正确:请尝试在控制台手动更改配置参数,确保您选择的云服务器配置与实际情况匹配。验证码加载失败:尝试重启服务器并尝试重新加载验证码并确保它已经成功加载。请求超时或网络故障:请确保您的服务器已经连接到互联网并且网络连接正常,并且您的请求超时时间设置为0或1秒。如果需要,请确保在请求中加入超时时间设置选项。网络连接问
2023-10-26

阿里云服务器部署前段项目从构建到运维的一站式解决方案

随着互联网技术的快速发展,网站和应用程序的需求日益增长。为了应对这些需求,前段项目变得越来越重要。前段项目是指开发和部署网站、应用程序的前端部分,主要包括HTML、CSS和JavaScript等技术。在选择服务器提供商时,许多企业会选择阿里云。本文将详细介绍阿里云服务器部署前段项目的过程,从构建到运维,提供一站式
阿里云服务器部署前段项目从构建到运维的一站式解决方案
2023-12-11

云服务器部署项目端口被占用怎么办啊怎么解决

因此,在部署云服务器时,我们需要对服务器端口进行管理和控制,以保证云服务器的正常运行。下面是一些解决端口被占用的方法:禁用或关闭不必要的端口禁用或关闭不必要的端口可以有效减少端口被占用的数量。在云服务器的管理控制面板中,可以通过添加/删除端口来管理端口。在禁用端口后,可以有效防止外部访问服务器,避免被黑客攻击。配置端口
2023-10-27

编程热搜

目录