Reducing SpringBoot Jar Size by Excluding Unnecessary lib Dependencies

This guide explains why SpringBoot JAR files become large when bundled with many external libraries, and provides a step‑by‑step method—including Maven configuration changes and runtime loader settings—to shrink the JAR by removing the BOOT‑INF/lib folder while preserving application functionality.

Architect's Guide
Architect's Guide
Architect's Guide
Reducing SpringBoot Jar Size by Excluding Unnecessary lib Dependencies

When a SpringBoot application is deployed to a public cloud server, the generated JAR often exceeds 18 MB because the BOOT‑INF/lib directory contains all external dependencies, which makes incremental updates and runtime tuning difficult.

Step 1: Build the project normally with mvn clean install, unzip the resulting JAR, and copy the BOOT‑INF/lib folder to the target machine.

Step 2: Modify pom.xml to repackage the JAR without the lib folder. Example configuration:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.johnnian.App</mainClass>
                <layout>ZIP</layout>
                <includes>
                    <include>
                        <groupId>nothing</groupId>
                        <artifactId>nothing</artifactId>
                    </include>
                </includes>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

After updating the POM, run mvn clean install again; the new JAR will be dramatically smaller because external JARs are no longer packaged.

Step 3: Run the reduced JAR by specifying the external lib directory with the SpringBoot loader path:

java -Dloader.path=/path/to/lib -jar /path/to/springboot-jsp-0.0.1-SNAPSHOT.jar

Alternatively, you can copy required dependencies using Maven:

mvn dependency:copy-dependencies -DoutputDirectory=F:\ideaWorkPlace\AnalysisEngine\lib -DincludeScope=runtime

Final directory layout should look like:

├── lib   # external libraries
└── springboot-jsp-0.0.1-SNAPSHOT.jar

Notes: the /path/to placeholder must be replaced with the actual file system path. Once the architecture is fixed, most JARs remain unchanged, and only business logic needs recompilation, greatly improving deployment efficiency.

Jar size before
Jar size before
Boot‑INF lib size
Boot‑INF lib size
Reduced JAR size
Reduced JAR size
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

DeploymentJARjar-reduction
Architect's Guide
Written by

Architect's Guide

Dedicated to sharing programmer-architect skills—Java backend, system, microservice, and distributed architectures—to help you become a senior architect.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.