使用Xjar给SpringBoot项目jar包加密

1. 新建一个SpringBoot项目

2. 在pom文件添加依赖,github地址:https://github.com/core-lib/xjar

<dependencies>
    <!-- 添加 XJar 依赖 -->
    <dependency>
         <groupId>com.github.core-lib</groupId>
         <artifactId>xjar</artifactId>
         <version>4.0.2</version>
    </dependency>
</dependencies>

<!-- 设置 jitpack.io 仓库 -->
<repositories>
   <repository>
       <id>jitpack.io</id>
       <url>https://jitpack.io</url>
   </repository>
</repositories>

3. 新建一个测试类

3.1 指定文件路径

import io.xjar.XCryptos;

public class XJarEncrypt {
    public static void main(String[] args) throws Exception {
        XCryptos.encryption()
                .from("E:\\Project\\test\\target\\test-0.0.1.jar")
                .use("123456")
                .include("/**.class")
                .include("/**.yml")
                .include("/**/*.xml")
                .include("/**.html")
                .to("E:\\Project\\test\\target\\test-0.0.2.jar");
        System.out.println("加密完成");
    }
}

3.2 获取当前项目jar包路径

package com.liyh.xjar;

import io.xjar.XCryptos;

public class XJarEncrypt {
    public static void main(String[] args) throws Exception {
        XCryptos.encryption()
                .from(System.getProperty("user.dir") + "/target/test-0.0.1.jar")
                .use("123456")
                .include("/**.class")
                .include("/**.yml")
                .include("/**/*.xml")
                .to(System.getProperty("user.dir") + "/target/test-0.0.2.jar");
        System.out.println("加密完成");
    }
}

4. 运行成功,到输出目录查看(生成三个文件)

5. Linux环境运行Jar包

5.1 首先目标系统有yum,主要环境是golang俗称go

5.2 没有的就要自己搞repo或者直接wget安装吧

yum list | grep golang

yum install -y golang

5.3 安装成功查看版本

go version

5.4 把文件传到linux上,注意需要两个文件(test-0.0.2.jarxjar.go)

5.5 进入jar包上传的目录下运行下面命令

go build xjar.go

5.6 得到xjar文件

5.7 运行jar包:普通运行

 ./xjar java -jar new.jar

5.8 运行jar包:后台运行(三种方式都可以,前两种可以输出日志)

nohup ./xjar java -jar test-0.0.2.jar &

nohup ./xjar java -jar test-0.0.2.jar > new.out &

./xjar java -jar test-0.0.2.jar  &

6. Windows环境运行Jar包

6.1 官网下载golang安装包,并安装好,下载地址

6.2 配置环境变量

当前下载的是1.19.3,安装好后默认在环境变量上已经有了GO_HOME,是默认的系统用户目录,如需要,可以改成自建的目录

此时在CMD里面跑一下go version,会显示如下版本

6.3 进入jar包上传的目录下运行下面命令

go build xjar.go

6.4 得到xjar.exe

6.5 然后操作启动jar包即可

 xjar.exe java -jar new.jar

7. 注意事项

7.1 打包后的jar包体积会变大

7.2 非必要前端页面不要打包(html和js)我打包了之后浏览器页面出现一直在加载的问题

<think>嗯,用户遇到了一个具体的技术问题:在使用XJarSpring Boot项目进行加密后,运行时提示找不到主类。这确实是个棘手的问题,需要系统地分析可能的原因和解决方案。 用户提供的引用信息[^1]展示了XJar加密的基本用法,但实际部署时出现了主类缺失的问题。从经验来看,这类问题通常涉及几个关键点:首先是加密过程是否正确处理了MANIFEST.MF文件中的主类声明;其次是Spring Boot的特殊打结构是否被完整保留;最后是运行时类加载机制是否被加密工具正确支持。 考虑到Spring Boot的executable jar结构,其主类信息实际上存储在BOOT-INF/classes目录外的MANIFEST.MF中。而XJar的include模式默认可能只加密了.class等资源文件,但没处理这个关键描述文件。这可能是问题的核心所在。 另外注意到用户示例代码里使用了include("/**/*.class")这样的通配符,这种写法在加密时可能会遗漏META-INF/目录下的重要文件。需要建议用户检查是否含所有必要资源,特别是springboot特有的启动加载器相关类。 对于解决方案,应该分层次建议:先验证基础配置(如pom.xml的启动类配置),再检查加密范围是否完整,最后考虑运行时环境。特别要提醒用户注意Spring Boot 2.3+版本对分层jar的支持变化,这个细节很容易被忽略。 用户显然已经尝试过加密部署,现在处于故障排查阶段,所以需要给出具体的诊断命令(如jar tf查看jar内容)和验证步骤。还要提醒加密工具可能存在的版本兼容性问题,比如对Spring Boot 3的支持情况。 最后要预防性地给出回退方案,毕竟加密工具处理不当可能导致整个jar不可用。建议用户在加密前保留原始jar,并考虑使用XJar的启动器模式作为替代方案。</think>针对使用 XJar 加密 Spring Boot 项目后出现 `Main Class Not Found` 的问题,以下是系统化的解决方案: ### 原因分析与解决方案 1. **主类声明丢失** XJar 加密可能覆盖了 `META-INF/MANIFEST.MF` 中的主类信息。 **修复步骤**: ```java XCryptos.encryption() .from("/path/to/original.jar") .use("123456") .include("/**/*.class") .include("/**/*.yml") .include("/**/*.xml") // 关键:显式含 MANIFEST 文件 .include("/META-INF/MANIFEST.MF") .to("/path/to/encrypted.jar"); ``` 2. **Spring Boot 启动器类未含** 标准启动类 `org.springframework.boot.loader.JarLauncher` 必须被加密含。 **验证方法**: ```bash jar tf encrypted.jar | grep JarLauncher.class ``` 若未找到,需调整 include 规则: ```java .include("/org/springframework/boot/loader/**/*.class") ``` 3. **自定义主类配置错误** 检查 `pom.xml` 中主类配置是否正确: ```xml <properties> <start-class>com.example.Application</start-class> </properties> ``` 加密后需通过 XJar 启动器运行: ```bash java -jar encrypted.jar --xjar.password=123456 ``` 4. **资源文件缺失** 确保关键配置文件被含: ```java .include("/**/*.properties") .include("/**/*.json") ``` ### 验证流程 1. 解压加密 jar 验证结构: ```bash jar xf encrypted.jar cat META-INF/MANIFEST.MF | grep Main-Class # 应输出:Main-Class: org.springframework.boot.loader.JarLauncher ``` 2. 检查启动类层级: ``` BOOT-INF/classes/com/example/Application.class # 用户主类 org/springframework/boot/loader/JarLauncher.class # Spring 启动器 ``` ### 备选方案 若问题仍存在,尝试: 1. **使用 XJar 启动器模式**: ```java XBoot.encrypt("/path/to/original.jar", "/path/to/encrypted.jar", "123456"); ``` 2. **降级 Spring Boot 版本** 某些版本(如 2.3+)的分层 JAR 可能与加密工具冲突,可暂时降级至 2.2.x 测试。 > **重要提示**:加密前务必保留原始 JAR 文件,避免不可逆损坏。若上述步骤无效,建议检查 XJar 版本与 Spring Boot 的兼容性,或尝试替代加密工具如 ProGuard。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值