How to Run a Class Within a WAR File Using the Command Line

1. 개요

WAR 파일(Web Application Archive 또는 웹 애플리케이션 리소스 파일의 줄임말)은 Java 웹 애플리케이션의 리소스를 저장하는 파일입니다. WAR는 모든 웹 구성 요소를 단일 유닛으로 패키징합니다. 여기에는 JAR 파일, JavaServer Pages, Java 서블릿, Java 클래스 파일, XML 파일, HTML 파일 및 웹 애플리케이션에 필요한 기타 리소스가 포함됩니다.

이 튜토리얼에서는 CLI를 사용하여 WAR 파일 내의 클래스를 호출하는 방법을 보여줍니다.

2. WAR 파일의 구조

WAR 파일은 .war 확장자를 사용하며, 우리가 배포할 수 있는 웹 애플리케이션을 패키징합니다.

여기 전형적인 WAR 파일 구조의 예가 있습니다:

META-INF/
    MANIFEST.MF
WEB-INF/
    web.xml
    jsp/
        helloWorld.jsp
    classes/
        com/baeldung/*.class
        application.properties
        static/
        templates/
    lib/
        // 타사 *.jar 파일을 라이브러리로 사용
index.html

내부에는 웹 아카이브에 대한 유용한 정보를 담고 있는 META-INF 디렉토리와 그 안에 MANIFEST.MF 파일이 있습니다. META-INF 디렉토리는 비공개이며 외부에서 접근할 수 없습니다.

WEB-INF 디렉토리는 모든 배포 정보와 애플리케이션 코드를 포함하는 특별한 디렉토리입니다. WEB-INF/classesWEB-INF/lib 디렉토리는 각각 Java 클래스 파일 및 JAR 라이브러리를 포함합니다. WAR 파일에는 HTML 페이지, 이미지 및 JS 파일을 포함한 모든 정적 웹 리소스도 포함되어 있습니다.

3. WAR 파일 내 클래스 실행하기

WAR 파일에서 클래스를 커맨드 라인으로 실행하는 다양한 접근 방식을 살펴보겠습니다.

3.1. java 명령을 -classpath 옵션과 함께 사용하기

Java 가상 머신 (JVM)는 Java 프로그램을 실행할 때 클래스를 찾고 로드하기 위해 classpath 환경 변수를 사용합니다. 이 변수는 JVM이 클래스 파일을 찾고 로드하기 위해 확인해야 할 디렉토리, JAR 파일 및 ZIP 파일의 목록을 지정합니다.

아래의 java 명령을 살펴보며 WAR를 실행하고 그 출력을 확인하겠습니다. -classpath 대신 -cp를 사용할 수 있습니다:

java -classpath target/maven-generate-war/WEB-INF/classes:target/maven-generate-war/WEB-INF/lib/* com.baeldung.MavenGenerateWarApplication

위 명령은 메인 메서드를 실행하며, 아래의 출력을 생성한 후 서버를 종료합니다:


3.2. java 명령을 –jar 옵션과 함께 사용하기

Spring Boot를 사용하여 WAR 파일을 빌드할 때, 애플리케이션 내에 Tomcat과 같은 임베디드 서버를 직접 포함할 수 있습니다. 우리는 WAR 파일을 Apache Tomcat과 같은 외부 서블릿 컨테이너에 배포할 필요가 없습니다. WAR에는 애플리케이션을 실행하는 데 필요한 모든 것이 포함되어 있습니다.

우리는 MavenGenerateWarApplication 클래스를 pom.xml에서 mainClass로 지정했습니다.

이제 아래의 명령을 실행하여 WAR 파일을 실행하겠습니다:

java -jar target/war-with-main-class.war

위 명령을 실행하면 MavenGenerateWarApplication 클래스가 실행되고, 서버가 시작됩니다. 아래의 출력이 나타나며 Spring Boot 애플리케이션이 시작됩니다:

2025-01-26 01:25:19.762  INFO 99652 --- [    main] o.apache.catalina.core.StandardService   :  Starting service [Tomcat]
2025-01-26 01:25:19.763  INFO 99652 --- [    main] org.apache.catalina.core.StandardEngine  :  Starting Servlet engine: [Apache Tomcat/9.0.74]
2025-01-26 01:25:20.256  INFO 99652 --- [    main] o.a.c.c.C.[Tomcat].[localhost].[/]       :  Initializing Spring embedded WebApplicationContext
2025-01-26 01:25:20.256  INFO 99652 --- [    main] w.s.c.ServletWebServerApplicationContext :  Root WebApplicationContext: initialization completed in 1009 ms
2025-01-26 01:25:20.378  INFO 99652 --- [    main] o.s.b.a.w.s.WelcomePageHandlerMapping    :  Adding welcome page template: index
2025-01-26 01:25:20.450  INFO 99652 --- [    main] o.s.b.w.embedded.tomcat.TomcatWebServer  :  Tomcat started on port(s): 8080 (http) with context path ''
2025-01-26 01:25:20.455  INFO 99652 --- [    main] c.baeldung.MavenGenerateWarApplication   :  Started MavenGenerateWarApplication in 1.575 seconds (JVM running for 1.834)

4. 결론

이 글에서는 Java에서 커맨드 라인을 통해 WAR 파일을 실행하는 다양한 접근 방식에 대해 논의했습니다.

WAR 파일을 java -jar로 실행하는 것은 임베디드 서버를 사용하는 현대 웹 애플리케이션을 실행하는 가장 좋은 옵션입니다. 반면에 java -classpath는 서블릿 컨테이너 없이 비웹 구성 요소를 실행하는 데 더 좋습니다.

이 기사에 대한 코드는 GitHub에서 확인할 수 있습니다. 로그인 시 Baeldung Pro 회원로 시작하여 프로젝트에서 학습하고 코드를 작성하세요.

원본 출처

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다