📦
Deployment & DevOps

Packaging — JAR vs WAR

Executable Fat JAR
💡 EXECUTABLE JAR EK "ALL-IN-ONE TRAVEL KIT" hai — SAB KUCH (application code + saari libraries + embedded server) EK SINGLE SUITCASE (FILE) mein PACKED hai. TRADITIONAL WAR file, EK "PARTIAL KIT" hai — TUMHE PEHLE se EK "HOTEL" (external application server) CHAHIYE hoti hai, JAHA ye kit UNPACK hoगi.

Spring Boot's DEFAULT PACKAGING, EXECUTABLE JAR ("FAT JAR" ya "UBER JAR") hai — EK SINGLE FILE mein, TUMHARA APPLICATION CODE, SAARI DEPENDENCIES, AUR EMBEDDED SERVER (Tomcat) — SAB KUCH INCLUDED hota hai. java -jar app.jar se, YE DIRECTLY RUN ho jaata hai, KOI EXTERNAL SETUP NAHI CHAHIYE.

WAR (Web Application Archive) TRADITIONAL Java EE PACKAGING FORMAT hai — EMBEDDED SERVER INCLUDE NAHI hota, EK EXTERNAL APPLICATION SERVER (Tomcat, WebLogic) mein DEPLOY karna PADTA hai. Spring Boot, WAR PACKAGING bhi SUPPORT karta hai (LEGACY compatibility ke liye), LEKIN MODERN, CLOUD-NATIVE deployments mein, JAR HI DEFAULT, PREFERRED CHOICE hai.

<!-- pom.xml — DEFAULT packaging (JAR): -->
<packaging>jar</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

# Build karna:
./mvnw clean package
# target/myapp-0.0.1-SNAPSHOT.jar ban jaata hai

# Run karna — KOI EXTERNAL server NAHI chahiye:
java -jar target/myapp-0.0.1-SNAPSHOT.jar
📦
EXECUTABLE JAR EK "ALL-IN-ONE TRAVEL KIT" hai — SAB KUCH (application code + saari libraries + embedded server) EK SINGLE SUITCASE (FILE) mein PACKED hai. TRADITIONAL WAR file, EK "PARTIAL KIT" hai — TUMHE PEHLE se EK "HOTEL" (external application server) CHAHIYE hoti hai, JAHA ye kit UNPACK hoगi.
1 / 6
⚡ Quick Recap
  • Fat JAR = application code + dependencies + embedded server, EK FILE mein
  • java -jar app.jar = DIRECTLY RUN, KOI EXTERNAL server SETUP NAHI chahiye
  • WAR = LEGACY application servers ke liye, MODERN deployments mein RARE
Is page mein (2 subtopics)

Spring Boot's EXECUTABLE JAR ("fat JAR" ya "uber JAR") ke ANDAR, EK NESTED STRUCTURE hoti hai — BOOT-INF/classes (TUMHARA compiled code), BOOT-INF/lib (SAARI dependencies, EMBEDDED), aur META-INF (manifest, jo BATATA hai KAUN SI CLASS "main" hai).

💡Tip: Fat JAR ke ANDAR jhaanke, unzip -l myapp.jar CHALAके — SAARI dependencies EMBEDDED DEKH sakte ho, ISI wajah se, EK SINGLE FILE, EK COMPLETE, RUNNABLE application hai.

AGAR EXISTING, LEGACY application server (jaise WebLogic, WebSphere) mein DEPLOY karna ho, WAR file BUILD kiya ja sakta hai — SpringBootServletInitializer EXTEND karke. MODERN, CLOUD-NATIVE deployments mein, YE RARE hai — JAR + embedded server, DEFAULT choice hai.

@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(MyApplication.class);
    }
}
// pom.xml mein: <packaging>war</packaging>