JEV模型需打包为免配置单文件JAR:先验证是否支持java -jar启动,否则重构;确保模型与配置均用classpath:引用;用Maven Shade Plugin或Spring Boot插件构建全量JAR;最后在无JDK环境验证可运行性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

将本地训练好的JEV模型(Java-based Embedding Vector model,常见于国产NLP工具链或私有化AI服务)打包为单文件、免配置、开箱即运行的部署包,需绕过Java环境依赖、模型路径硬编码、配置文件外置等典型障碍。
确认JEV模型运行形态
先验证你的JEV模型当前是否以标准Spring Boot可执行JAR方式运行:在项目根目录执行 java -jar target/*.jar,观察能否成功启动并响应HTTP请求(如 /v1/embed)。若报错 NoClassDefFoundError 或提示缺 lib/ 目录,说明它不是内嵌容器型JAR,不能直接用 java -jar 启动——必须进入下一步重构。
若启动失败且日志中出现 Failed to load property source from location 'classpath:/application.yml',说明配置强依赖外部YAML文件,此时不能跳过配置固化步骤。
提取并固化模型与配置资源
打开 src/main/resources/ 目录,确认以下三项是否存在且完整:
① 模型权重文件(通常为 model.bin、params.pt 或 encoder.onnx);
② 配置文件 application.yml 中的 jev.model.path 必须指向 classpath: 开头的路径,例如 jev.model.path: classpath:/models/model.bin;
③ 若使用分词器或词表,确保 vocab.txt、tokenizer.json 等也放在 src/main/resources/models/ 下,并在配置中用 classpath:/models/ 引用。
【必须修改】 删除所有 file:/xxx 或绝对路径写法,否则打包后运行时找不到模型——JAR内资源只能通过 classpath: 访问。
构建全量可执行JAR
方法一:Maven Shade Plugin(推荐,兼容所有JEV变体)
在 pom.xml 的 <build> → <plugins> 中添加:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.jev.JevApplication</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*)</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
执行 mvn clean package,生成的 target/*.jar 即为含全部依赖与资源的单文件。
方法二:Spring Boot Maven Plugin(仅限Spring Boot 3.x+ JEV封装项目)
确保 pom.xml 已引入 spring-boot-maven-plugin,且未禁用 repackage。直接运行 mvn clean package,产物位于 target/xxx-0.1.0.jar ——该JAR已自动合并所有 resources 和第三方jar,无需额外配置。
验证单文件可运行性
将生成的JAR复制到一台**未安装JDK**的机器(如干净的Ubuntu 22.04 Docker容器),执行:
docker run --rm -v $(pwd):/work -w /work openjdk:17-jre-slim java -jar jev-standalone.jar
若看到日志输出 Started JevApplication in X.XXX seconds 并监听 8080 端口,说明打包成功。
用 curl http://localhost:8080/v1/embed -d '{"text":"测试"}' 测试接口,返回有效向量即完成验证。

















