ruoyi vue 前后端分离版本 打包分离jar包至lib

文章讲述了在ruoyi前后端分离项目中,由于jar包过大导致的问题,以及如何通过调整maven配置,将不常更新的模块分离到lib目录,仅包含常更新模块在jar包内,从而减小jar包大小。过程中遇到了KaptchaTextCreator类加载失败的问题,通过自定义该类并修改配置解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:若依前后端分离版本,原打包时将所有的依赖jar包放至ruoyi-admin.jar 包中,该包130MB,过大。

需求:为了减少打包更新上传的时间,减少至1.1mb

1、将不常更新的模块jar包分离至lib文件夹

2、将常更新的模块如common、system等打包至jar包中。

在ruoyi-admin的pom文件中添加如下:

            <!--先去除所有的jar包-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <layout>ZIP</layout>
                    <includeSystemScope>true</includeSystemScope>
                    <includes>
                        <include>
                            <groupId>nothing</groupId>
                            <artifactId>nothing</artifactId>
                        </include>

                        <!--将需要的JAR包保留,如:项目中的 common、framework、system 等更新频繁的模块-->
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-common</artifactId>
                        </include>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-framework</artifactId>
                        </include>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-system</artifactId>
                        </include>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-quartz</artifactId>
                        </include>
                        <include>
                            <groupId>com.ruoyi</groupId>
                            <artifactId>ruoyi-generator</artifactId>
                        </include>
                    </includes>
                </configuration>
            </plugin>

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

            <!-- 分离lib, 拷贝依赖到lib目录 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>

                            <!-- 依赖包输出目录,将来不打进jar包里 ,将更新不频繁的模块放进lib -->
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <excludeTransitive>false</excludeTransitive>
                            <stripVersion>false</stripVersion>
                            <includeScope>runtime</includeScope>
                            <!-- 排除如下jar包,将更新频繁的模块不放进lib,放进jar包 -->
                            <excludeArtifactIds>
                                ruoyi-common,ruoyi-framework,ruoyi-system,ruoyi-quartz,ruoyi-generator
                            </excludeArtifactIds>
                        </configuration>

                    </execution>
                </executions>
            </plugin>

运行时会遇到一个问题:验证码无法显示

Caused by: java.lang.ClassNotFoundException: com.ruoyi.common.config.kaptcha.KaptchaTextCreator

at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)

at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)

at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

at java.base/java.lang.Class.forName0(Native Method)

at java.base/java.lang.Class.forName(Class.java:315)

at com.google.code.kaptcha.util.ConfigHelper.getClassInstance(ConfigHelper.java:112)

解决方案是重新编译原google 的kaptcha源码,改动一下红框标示之处

便于我使用,我直接将这个类 KaptchaTextCreator 放在了 common中,所以 

// properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.google.code.kaptcha.text.impl.KaptchaTextCreator");
properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.ruoyi.common.config.kaptcha.KaptchaTextCreator");  

这个包也可以用我修改的,如上. 版本号 1.1.1

<think>嗯,用户想了解如何对若依前后端分离项目进行打包。我需要先整理一下步骤,确保前后端分开处理。首先,前端用的是Vue3,应该用npm安装依赖然后打包生成dist目录。后端是SpringBoot,需要Maven的clean和package命令生成jar。记得引用中的例子提到在IDEA里用Maven工具双击clean和package,这应该放在后端打包步骤里。 然后,用户可能遇到的问题比如路径访问,比如主找不到从中的资源文件。根据引用2,可以用ClassLoader加载资源,这部分需要解释清楚如何获取URL和路径。还要注意路径是相对还是绝对,避免用户混淆。 另外,Docker部署的部分在引用3有提到,可能需要补充如何将打包好的文件放入Docker容器中运行,比如挂载卷或者构建镜像。但用户主要问的是打包,所以可能作为后续步骤简单提一下。 还要考虑用户可能的环境配置,比如Node.jsJava环境是否安装正确,Maven配置是否正确,这些虽然不是打包的直接步骤,但常见问题需要提醒。例如,前端打包时如果依赖安装失败怎么办,或者后端打包时测试失败如何处理,可以建议跳过测试。 最后,生成相关问题,比如性能优化、部署方式、配置文件修改、资源加载问题,以及多模块打包注意事项。这些能帮助用户进一步解决问题,符合用户需求。</think>### 若依前后端分离项目打包步骤详解 #### 一、前端(Vue3)打包 1. **安装依赖** 在项目根目录下执行: ```bash npm install ``` 若网络不稳定可使用国内镜像: ```bash npm install --registry=https://registry.npmmirror.com ``` 2. **构建生产环境代码** 执行打包命令生成`dist`目录: ```bash npm run build:prod ``` 生成的静态文件将存储在`ruoyi-ui/dist`目录中[^4]。 #### 二、后端(SpringBoot)打包 1. **Maven打包配置** - 在IDEA中打开右侧Maven面板 - 双击执行`clean`清理历史构建 - 双击执行`package`进行打包(添加`-DskipTests`跳过测试) ```bash mvn clean package -DskipTests ``` 打包完成后,会在`ruoyi-admin/target`目录生成`ruoyi-admin.jar`[^1]。 2. **多模块项目处理** 若项目含子模块(如`ruoyi-remote`),需确保: - 父pom.xml中正确配置`<modules>` - 子模块版本号与主模块依赖声明一致 #### 三、资源文件访问规范 当需要访问嵌套jar中的资源时,使用ClassLoader加载: ```java // 相对路径访问(推荐) URL resourceUrl = getClass().getClassLoader().getResource("burn/burnhex/hex2bin.exe"); // 绝对路径访问(需确认文件系统路径) // URL resourceUrl = new URL("jar:file:/opt/ruoyi/lib/ruoyi-remote-3.8.5.jar!/burn/burnhex/hex2bin.exe"); ``` 注意路径分隔符使用`/`且不含`!/`前的jar路径[^2]。 #### 四、部署准备 1. **文件结构示例** ``` /opt/ruoyi ├── lib │ └── ruoyi-remote-3.8.5.jar ├── ruoyi-admin.jar └── application.yml ``` 2. **Docker部署参考** 构建含所有依赖的容器环境: ```bash docker run -d -p 8080:8080 \ -v /opt/ruoyi:/app \ -e SPRING_PROFILES_ACTIVE=prod \ openjdk:11 java -jar /app/ruoyi-admin.jar ``` 此命令挂载本地目录到容器内,保持配置与资源可访问[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值