Spring Boot项目打包外部JAR依赖的3种解决方案与最佳实践

Spring Boot 项目部署打包时怎么才能不包含外部依赖库 文章目录一、问题背景二、解构 Spring Boot 的 jar 包三、解决办法四、一个服务器运行多个 Spring Boot 服务的情况 一、问题背景 Spring Boot 项目部署起来虽然已经简单很多了,但是一个运行 jar 包动辄几十上百兆,如果服务器是本地或者在内网还好,如果需要在公网环境部署,每次发布部署时都重新上传 Spring Boot 的 jar 包,因为网速的限制,也挺令人头大的。 二、解构 Spring Boot 的 jar 包 如果我们使用工具打开 Spring Boot 项目编译出 阅读详情

1. 项目背景与核心痛点

最近在重构一个老项目,遇到了一个典型的“历史遗留”问题。这个项目里用到了一个第三方厂商提供的SDK,这个SDK没有发布到Maven中央仓库,只有一个孤零零的JAR包,我们姑且叫它 vendor-sdk-1.0.0.jar 。在本地开发时,我们把它扔进了项目的 lib 目录,然后在 pom.xml 里用 <systemPath> 的方式引入,跑起来一切正常。问题出在打包上。当我们用 mvn clean package 准备打出一个可执行的Spring Boot JAR时,发现这个外部的JAR包并没有被包含进最终的 fat jar 里。部署到服务器上,应用一启动就报 ClassNotFoundException ,核心功能直接瘫痪。

这其实是一个Spring Boot结合Maven打包时非常经典的问题: 如何处理那些无法从远程仓库获取、必须本地引入的依赖(External JARs/Local Dependencies) 。很多朋友在集成银行支付SDK、硬件设备驱动JAR、或者一些公司内部尚未上传至私服的二方库时,都会踩进这个坑。网上的解决方案零零散散,有的让你改插件配置,有的让你手动复制,但很少有把前因后果、不同场景下的最佳实践以及背后的Maven生命周期讲透的。今天,我就结合这次踩坑和修复的全过程,把Spring Boot项目用Maven打包外部Lib依赖这件事,掰开揉碎了讲清楚。

2. 理解Spring Boot Maven插件的打包机制

要解决问题,首先得明白问题是怎么产生的。Spring Boot项目默认使用 spring-boot-maven-plugin 来打包,它打出来的是一个“可执行的JAR”,也就是我们常说的“Fat Jar”或“Uber Jar”。

2.1 Fat Jar的结构奥秘

一个标准的Spring Boot Fat Jar解压后,结构是这样的:

your-application.jar
├── META-INF/
├── BOOT-INF/
│   ├── classes/       # 你的应用编译后的.class文件
│   └── lib/           # **所有项目依赖的第三方JAR包**
└── org/springframework/boot/loader/ # Spring Boot的类加载器

关键在于 BOOT-INF/lib/ 这个目录。插件在打包时,会遍历你项目的所有依赖(包括传递依赖),然后将这些依赖的JAR文件全部收集起来,放进这个 lib 目录里。这样,最终的一个JAR文件就包含了运行所需的一切,实现了“开箱即用”。

2.2 插件如何收集依赖?

spring-boot-maven-plugin 收集依赖的逻辑,紧密依赖Maven本身的核心概念—— 依赖解析 。Maven在 package 生命周期的 compile 阶段,会根据 pom.xml 中的 <dependencies> 声明,从本地仓库和配置的远程仓库中解析并下载这些依赖。插件在后续的 repackage 目标(goal)中,会读取Maven解析好的、存储在本地仓库中的这些依赖文件,并将它们复制到 BOOT-INF/lib/ 下。

那么,坑点来了 :如果你通过 <systemPath> 引用一个本地文件系统的JAR,像下面这样:

<dependency>
    <groupId>com.vendor</groupId>
    <artifactId>vendor-sdk</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/vendor-sdk-1.0.0.jar</systemPath>
</dependency>

Maven确实能在编译和测试时找到这个JAR,因为 scope=system 明确告诉Maven:“别去仓库找了,就在我指定的路径里”。但是, spring-boot-maven-plugin 的默认行为是: 只打包那些从仓库(本地或远程)解析出来的依赖 。对于 system 作用域的依赖,它认为这是一个“系统路径”提供的、非常规的、可能与环境强绑定的依赖,因此默认选择忽略,不会将其复制到 BOOT-INF/lib/ 中。

这就是为什么本地运行OK,打包部署就报 ClassNotFoundException 的根本原因。你的代码编译时引用了这个类,但运行时在Fat Jar里根本找不到对应的JAR。

3. 解决方案一:将外部JAR安装到本地Maven仓库

这是最规范、最一劳永逸的解决方案,尤其适合团队协作和持续集成(CI/CD)环境。它的核心思想是:把那个“野生的”JAR,变成Maven家族的一员。

3.1 使用Maven命令手动安装

Maven提供了 install:install-file 这个目标,专门用于将本地文件安装到本地仓库。打开命令行,进入你的项目根目录,执行以下命令:

mvn install:install-file \
  -Dfile=lib/vendor-sdk-1.0.0.jar \
  -DgroupId=com.vendor \
  -DartifactId=vendor-sdk \
  -Dversion=1.0.0 \
  -Dpackaging=jar

参数解读与实操要点:

  • -Dfile : 指定外部JAR文件的路径。这里用的是相对路径,基于当前命令行所在目录。你也可以用绝对路径。
  • -DgroupId , -DartifactId , -Dversion : 这是你为这个JAR定义的Maven坐标。 强烈建议 ,如果原JAR的MANIFEST中有厂商信息,就按厂商信息来定;如果没有,就自己定义一个清晰、不会与其他依赖冲突的坐标,比如 com.company.thirdparty 。这个坐标将用于在 pom.xml 中引用。
  • -Dpackaging : 当然是 jar 。

执行成功后,你可以在本地的Maven仓库(通常是 ~/.m2/repository/ )下找到按照坐标组织的文件: ~/.m2/repository/com/vendor/vendor-sdk/1.0.0/vendor-sdk-1.0.0.jar 。

3.2 修改pom.xml依赖声明

安装完成后,就可以把原来那个“非主流”的 <systemPath> 依赖声明,改成标准的Maven依赖声明:

<dependency>
    <groupId>com.vendor</groupId>
    <artifactId>vendor-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

注意,这里不再需要 <scope>system</scope> 和 <systemPath> 。现在它就是一个普通的、来自本地仓库的依赖。 spring-boot-maven-plugin 在打包时,就能正常地从本地仓库找到并打包它。

优点:

  • 标准化 :完全遵循Maven的依赖管理规范。
  • 可传递 :如果其他模块依赖本模块,这个依赖可以被正确传递。
  • CI/CD友好 :只需要在构建服务器上也执行一次安装命令(或通过其他方式确保仓库中有该JAR),就能实现统一构建。

缺点与注意事项:

  • 团队协作成本 :每个开发人员的本地环境都需要执行一次安装命令。可以通过将安装命令写入项目README或提供一个初始化脚本(如 init.sh )来降低成本。
  • 版本管理 :如果外部JAR更新了,你需要重新安装并更新版本号。手动管理略有不便。
  • 安装到本地仓库的JAR是只读的 ,你不能直接修改它。如果需要修改,得先修改原JAR,再重新安装。

个人经验 :对于公司内部多个项目共用的、尚未搭建私服的二方库,我通常会写一个简单的 install-libs.sh 脚本放在项目根目录,新同事拉取代码后,执行一下这个脚本,所有外部依赖就都安装好了。脚本里就是一系列 mvn install:install-file 命令。

4. 解决方案二:使用 <system> 作用域并配置插件包含

如果你不想或不能动本地仓库(比如这个JAR版本频繁变动,或者你只是临时测试),也可以选择配置插件,明确告诉它:“嘿,那个 system 作用域的依赖,也请帮我打包进去。”

4.1 保持原有的system依赖声明

首先,保持你在 pom.xml 中的依赖声明不变:

<dependency>
    <groupId>com.vendor</groupId>
    <artifactId>vendor-sdk</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/vendor-sdk-1.0.0.jar</systemPath>
</dependency>

4.2 配置spring-boot-maven-plugin

然后,在 pom.xml 的 <build><plugins> 部分,找到 spring-boot-maven-plugin 的配置,添加 <includeSystemScope>true</includeSystemScope> :

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 关键配置:包含system作用域的依赖 -->
                <includeSystemScope>true</includeSystemScope>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这个配置直接指示插件,在收集依赖时,不要忽略 system 作用域的。这样打包时,插件就会去 <systemPath> 指定的路径找到这个JAR,并将其加入 BOOT-INF/lib/ 。

优点:

  • 简单直接 :不需要操作本地仓库,依赖文件就在项目目录内,直观。
  • 便于版本控制 :JAR文件可以随项目代码一起用Git等版本工具管理(注意仓库大小),版本切换就是替换一个文件。

缺点与坑点:

  • 破坏Maven约定 : system 作用域本身不被推荐,因为它破坏了依赖解析的可移植性。你的项目在别人的机器上可能因为路径问题无法编译。
  • 依赖无法传递 : system 作用域的依赖不会被传递给依赖你项目的其他模块。如果你的项目是个公共库,其他项目引用时会找不到这个依赖。
  • CI/CD需要额外处理 :构建服务器上必须存在相同的路径和文件。通常需要你在构建脚本中提前将文件复制到对应位置,或者使用Maven的 resources 插件将其复制到 target/classes 再引用,但这更复杂。
  • 路径硬编码 : <systemPath> 中的路径是硬编码的,如果项目结构改变,需要同步修改。

踩坑实录 :我曾经在一个项目中用这个方法,当时觉得省事。后来项目需要拆分子模块,这个 system 依赖在子模块中无法被父模块的插件配置正确识别,导致打包失败。排查了半天,最后还是换成了安装到本地仓库的方式。所以,除非是极其简单、一次性的个人项目,否则我通常不建议将这种方式作为首选。

5. 解决方案三:使用Maven依赖插件复制JAR到构建目录

这是一个更灵活、更“手动”的方案,其思路是:在Maven构建的生命周期中,提前将外部JAR复制到 target 目录下的某个位置(比如 target/lib/ ),然后通过配置 spring-boot-maven-plugin 将这个目录下的所有JAR都加入类路径并打包。

5.1 使用maven-dependency-plugin复制文件

首先,在 pom.xml 中配置 maven-dependency-plugin ,在 prepare-package 阶段(即在打包准备阶段)执行复制操作:

<build>
    <plugins>
        <!-- 其他插件... -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-external-lib</id>
                    <phase>prepare-package</phase> <!-- 关键阶段 -->
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.vendor</groupId>
                                <artifactId>vendor-sdk</artifactId>
                                <version>1.0.0</version>
                                <type>jar</type>
                                <overWrite>true</overWrite>
                                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

注意,这里的 <groupId> , <artifactId> , <version> 只是一个逻辑标识,用于配置项内部引用, 并不要求这个JAR已经在仓库中 。 <outputDirectory> 指定了复制目标。

但是,这个插件默认是从仓库复制。我们的JAR不在仓库,所以需要结合 maven-resources-plugin 或者更直接地,使用 maven-antrun-plugin 来执行文件拷贝。这里以 maven-antrun-plugin 为例,更通用:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-external-jar</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <!-- 创建目标目录 -->
                    <mkdir dir="${project.build.directory}/lib"/>
                    <!-- 复制外部JAR -->
                    <copy file="${project.basedir}/lib/vendor-sdk-1.0.0.jar"
                          tofile="${project.build.directory}/lib/vendor-sdk-1.0.0.jar"/>
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>

5.2 配置spring-boot-maven-plugin添加本地库目录

接下来,需要告诉 spring-boot-maven-plugin ,在打包时,额外将 target/lib/ 目录下的JAR也包含进去。这可以通过 <layout> 为 ZIP (或 JAR )并配置 <includes> 来实现,但更简单的是使用 <resources> 配置,不过更直接的是配置插件的 <configuration> :

实际上, spring-boot-maven-plugin 主要处理来自Maven依赖的JAR。对于这种完全外部的文件,更稳妥的方式是让Maven先将它们“变成”依赖的一部分。我们可以通过配置 maven-install-plugin 在构建过程中“临时安装”到本地仓库,但这和方案一本质类似。

一个更清晰的组合拳是:

  1. 使用 antrun 复制到 target/classes/BOOT-INF/lib/ (即Fat Jar内的最终位置)。
  2. 确保插件配置不排除任何文件。

但这样操作比较“黑魔法”,且容易和其他插件冲突。因此, 对于这种复杂的手动复制场景,我强烈建议优先考虑方案一(安装到本地仓库)或方案二(配置includeSystemScope) 。方案三更适合处理一些非标准的资源文件,或者你有非常复杂的、动态的依赖收集逻辑。

6. 进阶场景与最佳实践

处理单个外部JAR相对简单,但实际项目中可能会遇到更复杂的情况。

6.1 处理多个外部JAR依赖

如果你的 lib 目录下有一堆JAR,手动为每个执行安装命令太麻烦。可以写一个循环脚本,或者利用Maven的 install:install-file 支持通配符(但需要小心版本号)。更优雅的方式是创建一个专门的“安装”模块或使用 maven-install-plugin 在构建生命周期中批量安装。

批量安装脚本示例 (install-libs.sh):

#!/bin/bash
LIB_DIR="./lib"
for jar_file in $LIB_DIR/*.jar; do
  # 从文件名解析 artifactId 和 version,这里假设文件名格式为 name-version.jar
  # 这是一个简单示例,实际文件名可能更复杂,需要根据情况调整解析逻辑
  filename=$(basename "$jar_file" .jar)
  # 简单的分割,例如 vendor-sdk-1.0.0
  # 更健壮的做法是使用更复杂的解析或预先定义一个映射文件
  artifact_id=$(echo $filename | rev | cut -d- -f2- | rev) # 获取最后一个-之前的部分
  version=$(echo $filename | rev | cut -d- -f1 | rev) # 获取最后一个-之后的部分

  # 使用一个统一的 groupId,比如 com.company.thirdparty
  mvn install:install-file \
    -Dfile="$jar_file" \
    -DgroupId=com.company.thirdparty \
    -DartifactId="$artifact_id" \
    -Dversion="$version" \
    -Dpackaging=jar \
    -DgeneratePom=true
done

6.2 在CI/CD流水线中处理

在Jenkins、GitLab CI、GitHub Actions等持续集成环境中,本地仓库是临时的。你需要确保构建步骤中包含了安装外部依赖的环节。

以GitHub Actions为例的片段:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'temurin'
      - name: Install external libs
        run: |
          # 执行你的安装脚本,或者直接写安装命令
          mvn install:install-file -Dfile=./lib/vendor-sdk-1.0.0.jar -DgroupId=com.vendor -DartifactId=vendor-sdk -Dversion=1.0.0 -Dpackaging=jar
      - name: Build with Maven
        run: mvn -B clean package --file pom.xml

核心思想就是: 在 mvn package 之前,先执行 mvn install:install-file 。

6.3 依赖冲突与排查

即使外部JAR被打包进去了,还可能遇到依赖冲突问题。例如,外部JAR内部依赖了旧版本的 commons-lang3 ,而你的项目显式声明了新版本。

排查工具:

  • mvn dependency:tree :查看完整的依赖树,确认外部JAR的传递依赖。
  • mvn dependency:analyze :分析依赖使用情况。

解决冲突: 在 pom.xml 中,对你项目声明的依赖使用 <exclusions> 排除冲突的传递依赖,或者使用 <dependencyManagement> 统一管理版本,强制指定使用某个版本。

6.4 终极建议:搭建私有Maven仓库

对于企业级开发,如果经常需要用到无法从公共仓库获取的二方库、三方SDK,最专业、最一劳永逸的解决方案是搭建一个内部的私有Maven仓库,如 Nexus Repository Manager 或 JFrog Artifactory。

流程:

  1. 将外部JAR通过私有仓库的Web界面或API上传。
  2. 在项目的 pom.xml 或父 pom.xml 中配置该私有仓库的地址。
  3. 像引用任何公共依赖一样引用这些JAR。

这样做的好处是:

  • 依赖管理完全规范化 ,所有开发者、构建服务器环境一致。
  • 版本控制清晰 ,上传时指定版本,回滚、升级都很方便。
  • 提升构建速度 ,尤其是对于大型团队,避免了每个人本地安装的重复劳动。
  • 安全性 ,可以管控哪些依赖可以被下载。

从长远来看,投资搭建一个私有仓库,是提升团队研发效能和工程规范的重要一步。当你的项目从“处理一两个外部JAR”成长到需要管理数十个内部组件时,私有仓库的价值就会无比凸显。

Spring Boot项目Maven打包实战:从依赖缺失到可执行胖Jar 在Java应用开发中,依赖管理是构建可部署应用的核心环节。Maven作为主流构建工具,其默认打包机制仅包含项目自身编译产物,导致部署时频繁出现ClassNotFoundException等依赖缺失问题。Spring Boot通过spring-boot-maven-plugin创新性地引入可执行胖Jar(Fat Jar)解决方案,将项目代码与所有第三方依赖整合为单一可执行文件,极大简化了部署流程。这种自包含的打包方式不仅解决了环境依赖问题,更为持续集成和容器化部署奠定了坚实基础。本文聚焦Spring Boot 阅读详情

相关推荐

Spring Boot项目Maven打包全攻略:从Fat Jar到Docker分层构建

在Java应用开发中,依赖管理和打包部署是保障应用可移植性与一致性的核心环节。其原理在于通过构建工具将项目代码与第三方库组织成可独立运行的部署单元。这一技术对于实现持续集成、环境标准化和云原生部署具有关键价值,广泛应用于微服务架构、容器化部署等场景。本文聚焦于Spring Boot项目,深入解析如何使用Maven插件实现高效打包。通过对比Fat Jar、Thin Jar及Docker分层镜像等不同策略,并结合依赖冲突、资源路径等高频问题,提供从基础配置到CI/CD集成的实战指南,帮助开发者构建可靠、高效的部

weixin_33912453的博客 546

SpringBoot引入第三方jar包或本地jar包的处理方式

在项目开发中不可避免会遇到引入第三方jar包的情况,这些第三方jar是在Maven仓库中没有的。 有两种处理方式: 将jar包安装在本地maven库(本地私服) 将jar包放入项目目录中。 这里主要讲述第二种方式,而第二种方式又分两种情况:项目打jar包和项目打war包。 ① 项目打jar包时引入第三方jar 项目打jar包此时是没有src/main/webap/WEB-INF/...

小小默:进无止境 1万+

python电子学会三级的零碎笔记

‌示例‌:如果s = ['a', 'b', 'c'],则' '.join(s)+'\n'的结果是'a b c\n',写入文件时所有元素会在一行内显示,每个元素之间用空格分隔,末尾有一个换行符。(2) '\n'.join(s)‌:如果s = ['a', 'b', 'c'],则'\n'.join(s)的结果是'a\nb\nc',写入文件时每个元素会占据文件的一行。(1) ' '.join(s)+'\n'‌:这种方式首先将列表s中的每个元素通过空格连接成一个字符串,然后在字符串末尾添加一个换行符\n。

xzal12的博客 690

python3 logging 学习笔记

文章来源:https://www.jianshu.com/p/4993b49b6888 logging简单使用 看下面的代码就可以对logging的使用有一个基本的认识 # 亭子 #!/usr/bin/env python3 # -*- coding:utf-8 -*- ''' 记录了logging的简单使用方式,主要怎么配置logging ''' import logging def...

急流勇进 709

ELK - CentOS7 安装 elasticsearch 7.17.5

elk elasticsearch 安装

qq_19783793的博客 1461

告别理论!手把手教你用Patran/Nastran搞定悬臂翼的颤振分析(附完整模型文件)

本文提供了一份详细的Patran/Nastran悬臂翼颤振分析实战指南,涵盖从几何建模到结果解读的全过程。通过手把手教学和完整模型文件,帮助工程师和学生快速掌握气动弹性分析技术,特别适合需要实际操作的初学者。文章重点介绍了模态分析、气动建模和颤振求解等关键步骤,并提供了常见问题排查和优化建议。

weixin_30879169的博客 493

python3 logging_python3 logging 学习笔记

虽然我不是一个专业的coder,但是我是一个态度的tester。logging简单使用看下面的代码就可以对logging的使用有一个基本的认识# 亭子#!/usr/bin/env python3# -*- coding:utf-8 -*-'''记录了logging的简单使用方式,主要怎么配置logging'''import loggingdef simple_example():#默认过滤级别为w...

weixin_35333277的博客 440

JavaScript China城市联动

中国全城市的地址省,市,县 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title></title> <script src="jquery.js"></script> <script src="json.js"></...

唯唯同学 2241

Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖?

前两天被人问到这样一个问题: “松哥,为什么我的 Spring Boot 项目打包成的 jar ,被其他项目依赖之后,总是报找不到类的错误?” 大伙有这样的疑问,就是因为还没搞清楚可执行 jar 和普通 jar 到底有什么区别?今天松哥就和大家来聊一聊这个问题。 多了一个插件 Spring Boot 中默认打包成的 jar 叫做 可执行 jar,这种 jar 不同于普通的 jar,普通的 jar...

江南一点雨的专栏 6696

OV5645摄像头原理图设计,已量产

在嵌入式视觉项目里,摄像头小板真正决定量产稳定性的,往往不是把传感器接出来这件事本身,而是电源域有没有拆清、参考时钟够不够干净、主板调试时有没有留出可落地的接口。ATK-MC5645 这张原理图的价值,就在于它没有把 OV5645 裸接到一排连接器上,而是把 AFVDD_2V8、DOVDD_1V8、DVDD_1V5、24MHz 时钟和 MIPI/控制信号都收敛在一块独立模组上。

不脱发的程序猿 329

如何离线环境下安装Dify插件 (可提供远程指导协助)

离线环境下安装Dify插件

litlit023的专栏 8100

Spring Boot项目打包外部Jar依赖的4种方案与最佳实践

在Java企业级开发中,Maven作为主流的依赖管理工具,其核心原理是基于坐标体系从仓库自动下载和管理Jar包。然而在实际工程实践中,开发者常会遇到需要集成未发布到Maven仓库的第三方SDK或遗留系统Jar包的情况,这直接关系到项目的构建可移植性和团队协作效率。从技术价值角度看,正确处理外部依赖不仅能避免ClassNotFoundException等运行时错误,更是实现持续集成和自动化部署的关键环节。本文针对Spring Boot项目中常见的本地lib目录依赖场景,深入剖析了四种主流解决方案:通过mvn

weixin_34252090的博客 516

ceph recovery 相关参数

可以修改的最大回填/恢复选项列在 “恢复/回填选项” 部分。mClock 的修改 默认回填/恢复限制由 osd_mclock_override_recovery_settings 选项,设置为 默认为 false。尝试修改任何默认恢复/回填限制而不设置门控选项,会将该选项重置为 mClock 默认值,并在集群日志中记录一条警告消息。请注意,默认值可能需要几秒钟才能恢复生效。请使用 config show 命令验证限制,如下所示。就直接设置以下参数,过一会就变回了默认值。简单点说官网的意思就是不设置。

weixin_40548182的博客 278

SpringBoot项目如何引入外部jar及将外部jar打包到项目发布jar包

引入jar包及打包

最爱嫣夜来 7876

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Maven - Spring Boot 项目打包本地 jar 的 3 种方法

本文介绍了在Spring Boot项目中引入本地JAR文件的解决方案。针对无法从仓库获取的第三方JAR,通过<scope>system</scope>声明依赖,配合maven-resources-plugin将JAR复制到BOOT-INF/lib目录,确保打包时能包含在最终的可执行JAR中。方案包含详细配置示例、构建流程图和验证步骤,适用于临时集成、离线部署等场景。同时指出system scope的局限性,建议长期方案应使用本地仓库或私服管理依赖。

小工匠 1525

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot项目如何引入外部jar及将外部jar打包到项目发布war包

我们现在是需要把项目打包成war包了,那么打包的时候就不需要内嵌web容器了,需要排除掉。这里需要选择我们的tomcat Server启动。在build下设置项目最终打包的项目名称,如果不设置也是可以的, 默认显示的就是是项目name加上版本号。引入外部jar成功,在自己的项目中如果使用了外部jar的方法修改了项目代码,需要重新进行打包部署。OK,项目中的接口可以正常访问, 引入外部jar包之后,项目打包并部署依然是成功的。个外部的jar包, 我这里使用的是guava-31.1-jre.jar作为演示。

最爱嫣夜来 4264

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Maven - Spring Boot项目集成 打包 部署 依赖管理实战

本文介绍了Maven与Spring Boot的技术栈组合,详细讲解了项目初始化、依赖管理、打包部署等核心内容。主要内容包括: Spring Boot的核心优势(自动配置、起步依赖等)与Maven的不可替代性(声明式依赖管理、标准化生命周期等) 项目初始化方法: 使用Spring Initializr在线生成器快速创建项目 手动编写pom.xml的详细配置 创建主启动类和简单Controller示例 基础构建与运行命令 文章通过代码示例、Mermaid架构图等方式,帮助开发者快速掌握Maven与Spring

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Spring Boot项目打包和运行

执行打包操作后,会在控制台中输出打包的结果,如果打包成功会在项目的target 文件夹下创建项目对应的可执行JAR包,如图所示。至此,将项目打包为WAR包的准备工作已经完成,下面参照之前使用Maven工具栏中的命令打包项目的过程,将项目进行打包,打包后的结果如图所示。的依赖只需在编译和测试阶段使用,所以使用****标签将该依赖的作用范围指定在编译和测试阶段,避免打包时将对应的依赖打包到 WAR 包中。默认情况下创建的 Spring Boot 项目打包方式为jar,要将项目打包为WAR包,需要在项目的。

qq_42184486的博客 2537

Spring Boot项目打包第三方Jar包

选择策略长期维护项目 → system scope + 版本控制临时验证 → 资源目录打包复杂场景 → 依赖复制插件最佳实践建立本地Jar仓库管理机制使用版本号规范命名(如在CI/CD流程中加入Jar完整性校验。

小李同学的博客 1432

【SpringBoot】Spring Boot 项目的打包配置

Spring Boot 基础项目:适合构建独立应用,打包成 JAR 包,包含所有依赖,配置 spring-boot-maven-plugin。Spring Boot + HTML 项目:适用于前端静态资源服务,静态文件(如 HTML、CSS、JS)放在 src/main/resources/static 中,打包为 JAR 包。Spring Boot + Web 项目:适用于需要 Web 层的应用,可以选择内嵌 Web 容器或部署到外部容器,打包为 JAR 或 WAR 包。

小叶的碎碎念 1863

springboot一次打包两个jar配置示例:一个jar表示可以被其他项目依赖的 jar ,一个jar表示可执行的jar

前两天被人问到这样一个问题:“为什么我的 Spring Boot 项目打包成的 jar ,被其他项目依赖之后,总是报找不到类的错误?大伙有这样的疑问,就是因为还没搞清楚可执行 jar 和普通 jar 到底有什么区别?今天松哥就和大家来聊一聊这个问题。

学亮编程手记 1258

Maven打包SpringBoot项目时排除依赖jar方法,以减小jar包大小

问题 Spring Boot 项目jar包太大,上传服务器耗时太长 方案 将jar包中BOOT-INF 下的 lib 目录移出,打包时排除依赖jar,在启动时指定加载外部依赖jar目录 解决 正常maven打包 mvn clean package 使用解压工具打开jar包,并将BOOT-INF 下的 lib 目录拷贝至单独目录; 在项目pom.xml中添加/修改配置 <plugins> <plugin> .

qq_40784783的博客 3597

Spring Boot 依赖包单独打包

目录: 1.前言 2.瘦身前的Jar包 3.解决方案 一、前言 SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网,部署起来实在头疼:编译出来的 Jar 包很大,如果工程引入了许多开源组件(Spring Cloud等),那就更大了。 这个时候如果想要对线上运行工程有一些微调,则非常痛苦。 二、瘦身前的Jar包 Tomcat在部署Web工程的时候,可以进行增量更新,Spring Boot也是可以的~ SpringBoot编译出来的Jar包中,磁盘占用..

2611
上一篇: Opus 5与Codex语音模式:构建下一代智能语音交互系统实战
下一篇: STM32 HRTIM高精度定时器与DMA实现多路PWM同步更新实战
hidetobj
博客等级 码龄19年 16粉丝 301原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值