Packaging — JAR vs WAR
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- 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
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).
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>