You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring 3下替代spring-boot-cli的spring jar -cp命令方案咨询

替代Spring Boot CLI spring jar命令的可行方案

针对Spring 3.3.3移除spring jar命令后的需求,结合Docker环境、/lib目录依赖、离线Maven及快速迭代Groovy代码的目标,提供以下三种实用方案:

方案一:直接运行Groovy代码(最快迭代)

无需提前打包,修改Groovy文件后直接重启命令即可,完全适配快速迭代需求:

  1. 设置类路径:将/lib下所有依赖Jar、当前目录(存放Groovy文件和application.yml)加入类路径
  2. 启动命令:利用Groovy直接运行Spring Boot主类

示例bash启动脚本

#!/bin/bash
# 拼接类路径:/lib下所有jar + 当前目录
CLASSPATH=$(find /lib -name "*.jar" | tr '\n' ':'):.
# 运行Groovy主类(TestMain为你的Spring Boot主类,需带@SpringBootApplication注解)
groovy -cp "$CLASSPATH" TestMain.groovy

说明

  • 修改Groovy文件或application.yml后,直接终止进程再重新执行脚本即可
  • 若Groovy版本与依赖兼容,无需额外配置,容器内已安装Groovy即可运行

方案二:用离线Maven + Spring Boot插件快速构建

利用容器内的离线Maven,通过极简pom.xml快速构建可运行Jar,兼顾打包和快速迭代:

  1. 创建极简pom.xml(放在Groovy文件同目录):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.3</version>
        <relativePath/>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>groovy-app</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <groovy.version>4.0.15</groovy.version>
    </properties>
    <dependencies>
        <!-- 引入/lib目录的本地依赖 -->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>test-config</artifactId>
            <version>1.0.0</version>
            <scope>system</scope>
            <systemPath>/lib/test-config.jar</systemPath>
        </dependency>
        <!-- Spring Boot基础依赖(离线Maven需已缓存) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>./</sourceDirectory> <!-- 指定Groovy文件所在目录 -->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>TestMain</mainClass> <!-- 指定主类 -->
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>1.13.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
  1. 构建/启动命令:
# 直接启动应用(修改Groovy后重新执行即可)
mvn spring-boot:run -Dmaven.repo.local=/path/to/offline/repo

# 或打包成可运行Jar
mvn package -Dmaven.repo.local=/path/to/offline/repo
java -jar target/groovy-app-0.0.1-SNAPSHOT.jar

说明

  • 离线Maven需提前缓存好Spring Boot及Groovy相关依赖
  • sourceDirectory指定为当前目录,无需按标准Maven目录结构存放Groovy文件

方案三:手动模拟spring jar打包逻辑

完全复刻原spring jar的打包流程,手动构建Spring Boot可运行Jar结构:

  1. 创建临时目录结构:
mkdir -p temp/BOOT-INF/lib temp/BOOT-INF/classes temp/META-INF
  1. 复制依赖与代码:
# 复制/lib下所有Jar到BOOT-INF/lib
cp /lib/*.jar temp/BOOT-INF/lib/
# 复制Groovy文件和application.yml到BOOT-INF/classes
cp *.groovy application.yml temp/BOOT-INF/classes/
  1. 创建META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: TestMain
Spring-Boot-Version: 3.3.3

将上述内容保存到temp/META-INF/MANIFEST.MF

  1. 打包成可运行Jar:
# 进入temp目录打包
cd temp
jar cvfm ../app.jar META-INF/MANIFEST.MF .
cd ..
  1. 启动应用:
java -jar app.jar

说明

  • 需确保org.springframework.boot.loader.JarLauncher所在的Jar(spring-boot-loader)已在/lib目录中
  • 修改Groovy文件后,重复步骤2-4重新打包即可

内容的提问来源于stack exchange,提问作者Sean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:32:04