war 배포 방식은 애플리케이션 서버(tomcat)에 프로젝트를 올려 실행시키는 방식이라면
jar 배포 방식은 자바파일에 톰캣 서버를 내장해서, jar를 실행시킬때 서버도 함께 실행되는 방식입니다.
사실 배포방법은 별거 없습니다.그냥 실행만 해주면 되거든요.
터미널을 열어 jar 파일이 있는 디렉토리로 이동 후
java -jar myAppName.jar
명령어를 입력해주면 됩니다.그럼 jvm에 자바 파일이 올라가면서 서버가 실행 됩니다.
아주 간단하죠?
그러면 BOOT-INF와 META-INF가 생성되는데
우리의 소스파일은 BOOT-INF에 위치합니다.(applicaton.properties 포함)
META-INF에는 java를 배우면서 한 번 쯤은 봤을 MANIFEST.MF 파일이 있습니다.앞서 말했듯이 jar 배포방식은 "톰캣을 내장한 자바 실행파일"이기 때문에 MENIFEST가 있습니다.
MENIFEST에는 어플리케이션이 실행시킬 main class(public static void main)와 프로젝트 각 디렉토리의 location에 대해 설정되어있습니다.
그런데
MANIFEST.MF 파일에
MAIN-CLASS에 우리의 main class가 아닌 JarLauncher라는게 등록되어 있고 SUB-CLASS에 우리 애플리케이션의 main class가 지정돼있는데요.
그 이유는 jar 안에 jar lib를 포함할 수 없다는 Java 표준의 한계때문입니다.
JarLauncher는 그 한계를 넘기위한 사전 처리를 한 뒤 sub-class에 등록된 우리의 main class에 제어권을 넘깁니다.