iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Spring Boot项目部署到Linux服务器运行报错怎么解决
  • 725
分享到

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

2024-04-02 19:04:59 725人浏览 独家记忆
摘要

这篇文章主要介绍“Spring Boot项目部署到linux服务器运行报错怎么解决”,在日常操作中,相信很多人在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服务器运行报错怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Spring Boot项目部署到Linux服务器运行报错怎么解决

本文链接: https://www.lsjlt.com/news/90222.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Spring Boot项目部署到Linux服务器运行报错怎么解决
    这篇文章主要介绍“Spring Boot项目部署到Linux服务器运行报错怎么解决”,在日常操作中,相信很多人在Spring Boot项目部署到Linux服务器运行报错怎么解决问题上存在疑惑,小编查阅了各式...
    99+
    2024-04-02
  • spring boot项目部署到ubuntu服务器详细教程
    1.准备 IDEA; 开发好的SpringBoot项目; Ubuntu服务器; 2.将项目打包,利用IDEA的打包功能,这里以jar文件为例 SpringBoot官方推荐打成jar包,服务器上有JDK 1.8以上环境就可以直接运行; 首先在...
    99+
    2023-09-09
    spring boot intellij-idea ubuntu 后端 服务器
  • Linux怎么部署项目并运行
    要部署和运行项目在Linux上,您可以按照以下步骤进行操作: 首先,确保您的Linux系统上已经安装了必要的软件和工具,如Git...
    99+
    2023-10-23
    linux
  • linux怎么部署jar包项目并运行
    要在Linux上部署和运行一个jar包项目,可以按照以下步骤进行操作:1. 确保你已经安装了Java开发环境(JDK):可以通过运行...
    99+
    2023-08-31
    linux jar
  • 利用Spring Boot 怎么部署一个微服务项目
    这篇文章将为大家详细讲解有关利用Spring Boot 怎么部署一个微服务项目,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如果开发过spring boot的程序,应该都知道,使用sprin...
    99+
    2023-05-31
    springboot spring boo
  • 【Java开发】 Spring 11 :Spring Boot 项目部署至云服务器
    Spring Boot 项目开发结束后的工作便是运维,简单来说需要配置 Web 运行参数和项目部署两大工作,本文将尽可能详细地给大家讲全! 目录 1 定制 Web 容器运行参数 1.1 运行参数介绍 1.2 项目搭建 ① 通过 IDE...
    99+
    2023-10-25
    java spring spring boot 后端 docker
  • maven的spring boot项目部署到tomcat出现js文件失效怎么解决
    本篇内容主要讲解“maven的spring boot项目部署到tomcat出现js文件失效怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“maven的sp...
    99+
    2024-04-02
  • vue2.0项目怎么部署到服务器
    Vue 2.0是一种基于JavaScript的开源Web应用程序框架,它易于使用,功能强大,并且允许您快速构建交互式用户界面。如果您已经开发了一个Vue 2.0项目,并且想要将其部署到服务器上,本文将向您介绍一些简单的步骤。第一步:准备您的...
    99+
    2023-05-14
  • javaweb项目怎么部署到服务器
    将JavaWeb项目部署到服务器通常是通过以下步骤来完成的: 打包项目:首先需要将项目打包成war文件或者jar文件。可以使用M...
    99+
    2024-04-09
    javaweb 服务器
  • django项目怎么部署到服务器
    要将Django项目部署到服务器上,通常需要以下步骤: 确保服务器环境:首先确保服务器上已安装Python和Django,并且安...
    99+
    2024-03-01
    django 服务器
  • 将 .net core 项目部署到 Linux服务器
    目录 1、前言 2、安装 .NET SDK 或 .NET 运行时 3、创建数据库 4、发布项目到Linux环境 5、配置Nigix 6、Nginx配置Https 7、安装Supervisor 1、前言 部署服务器:阿里云的CentOS ...
    99+
    2023-09-07
    服务器 linux .netcore
  • 项目部署到云服务器怎么办
    如果您正在部署云服务器,并希望将其部署到云服务器上,您可以按照以下步骤执行: 选择适当的云服务器品牌和类型。例如,有些云服务提供商提供按需计算、弹性计算、高可用性和负载均衡等功能。您可以选择适合您需求的云服务提供商。 下载云服务器的镜像...
    99+
    2023-10-27
    服务器 项目
  • java项目怎么部署到云服务器
    要将Java项目部署到云服务器,可以遵循以下步骤:1. 选择云服务提供商:根据需求选择适合的云服务提供商。2. 创建云服务器实例:在...
    99+
    2023-09-28
    云服务器 java
  • node项目怎么部署到云服务器
    要将Node项目部署到云服务器,可以按照以下步骤进行操作:1. 选择一个云服务提供商,注册并创建一个云服务器实例。2. 在云服务器上...
    99+
    2023-09-22
    云服务器
  • windows怎么部署项目到云服务器
    要将项目部署到云服务器,可以按照以下步骤进行操作:1. 在云服务提供商上创建一个云服务器实例,并确保已经将其配置和启动。2. 在本地...
    99+
    2023-08-08
    windows 云服务器
  • linux怎么部署微服务项目
    要在Linux上部署微服务项目,你可以按照以下步骤进行操作: 安装必要的软件:在Linux上部署微服务项目,你需要安装Docke...
    99+
    2023-10-27
    linux 微服务
  • Golang 打包go项目部署到linux服务器
    Golang 打包go项目部署到linux服务器 文章目录 Golang 打包go项目部署到linux服务器网上方法正确方法 网上方法 我们可以在终端中输入以下代码: set CGO_ENABLED=0set GOOS=li...
    99+
    2023-08-18
    linux 服务器 golang
  • 云服务器项目部署失败怎么解决
    云服务器项目部署失败是一种常见的问题,下面是一些解决方法: 检查您的配置文件,确保它已正确更新。确保所有的硬件、操作系统和服务都与云服务器的要求相符合。 重新启动您的云服务器,以便它可以运行并重新连接到服务器。 检查您的网络连接,确保它...
    99+
    2023-10-26
    服务器 项目
  • springboot项目怎么部署到云服务器上
    要将 Apache Jenkins 部署到云服务器上,您可以按照以下步骤进行: 安装 Web 服务器软件:使用您准备好的常用 Web 服务器软件之一。例如,您可以使用 AWS、Azure 或 Google Cloud FS。 配置 AW...
    99+
    2023-10-27
    器上 项目 springboot
  • 怎么将Github项目部署到服务器上
    这篇文章主要介绍“怎么将Github项目部署到服务器上”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么将Github项目部署到服务器上”文章能帮助大家解决问题。一、登录服务器使用SSH远程连接,输...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作