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

SpringBoot应用打包求助:自动生成含新JAR的二进制文件

SpringBoot自动打包并生成可执行启动脚本解决方案

方法一:改造start.sh自动匹配JAR

直接修改启动脚本,让它自动识别当前目录下的SpringBoot可执行JAR(排除Maven生成的原始JAR):

#!/bin/bash
# 自动查找当前目录下的SpringBoot JAR文件
APP_JAR=$(ls -1 *.jar | grep -v "original-" | head -n 1)

if [ -z "$APP_JAR" ]; then
    echo "Error: 未找到SpringBoot JAR文件"
    exit 1
fi

# 启动应用
java -jar "$APP_JAR" "$@"

后续每次打包后,脚本会自动定位最新生成的JAR,无需手动修改路径。

方法二:Maven插件自动生成可执行JAR/启动脚本

方案1:生成自带启动逻辑的可执行JAR

无需额外脚本,直接让SpringBoot JAR具备可执行性:

  1. 在pom.xml中配置插件:
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
            </configuration>
        </plugin>
    </plugins>
</build>
  1. 执行打包命令:mvn clean package
  2. 直接运行生成的JAR:./your-app.jar

方案2:动态生成带正确JAR路径的start.sh

通过Maven资源插件在打包时替换脚本中的JAR名称:

  1. 新建src/main/resources/start.sh.template文件:
#!/bin/bash
java -jar @project.build.finalName@.jar "$@"
  1. 在pom.xml中添加资源插件配置:
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>start.sh.template</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}</outputDirectory>
                        <resources>
                            <resource>
                                <directory>src/main/resources</directory>
                                <filtering>true</filtering>
                                <includes>
                                    <include>start.sh.template</include>
                                </includes>
                            </resource>
                        </resources>
                        <delimiters>
                            <delimiter>@</delimiter>
                        </delimiters>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

打包后,target目录下会生成替换好JAR名称的start.sh,直接赋予执行权限即可使用。

方法三:Gradle用户适配方案

方案1:生成可执行JAR

在build.gradle中配置:

plugins {
    id 'org.springframework.boot' version '3.x.x'
    id 'java'
}

springBoot {
    executable = true
}

执行./gradlew bootJar,生成的JAR直接通过./build/libs/your-app.jar启动。

方案2:自动生成启动脚本

添加Gradle任务实现动态生成:

task generateStartScript {
    doLast {
        def jarName = "${project.name}-${project.version}.jar"
        def scriptContent = """#!/bin/bash
java -jar $jarName "\$@"
"""
        def scriptFile = file("build/libs/start.sh")
        scriptFile.text = scriptContent
        scriptFile.setExecutable(true)
    }
}

bootJar.finalizedBy(generateStartScript)

执行打包命令后,build/libs目录会自动生成带正确JAR路径的启动脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:45:07