Maven 프로젝트 수동 구성 및 빌드 명령어 실행 가이드

1. Maven 프로젝트 디렉터리 구조 생성

Maven의 표준 디렉터리 레이아웃에 맞춰 프로젝트 폴더와 소스 코드를 배치합니다. IDE를 사용하지 않고 수동으로 구조를 잡을 때는 다음과 같은 계층을 유지해야 합니다.

ManualMavenDemo
  ├── pom.xml
  └── src
      ├── main
      │   └── java
      │       └── com/example/demo/MessageService.java
      └── test
          └── java
              └── com/example/demo/MessageServiceTest.java

2. 소스 코드 및 POM 파일 작성

Maven 프로젝트의 핵심 설정 파일인 pom.xml에는 프로젝트의 좌표(Group ID, Artifact ID, Version)와 의존성을 정의합니다.

MessageService.java

기본 비즈니스 로직을 담당하는 클래스입니다.

package com.example.demo;

public class MessageService {
    public String getGreeting(String name) {
        if (name == null || name.trim().isEmpty()) {
            return "Hello, World!";
        }
        return "Hello, " + name + "!";
    }
}

MessageServiceTest.java

JUnit을 사용하여 MessageService의 동작을 검증하는 테스트 클래스입니다.

package com.example.demo;

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class MessageServiceTest {
    
    @Test
    public void testGetGreetingWithName() {
        MessageService service = new MessageService();
        String result = service.getGreeting("Maven");
        assertEquals("Hello, Maven!", result);
    }

    @Test
    public void testGetGreetingWithoutName() {
        MessageService service = new MessageService();
        String result = service.getGreeting("");
        assertEquals("Hello, World!", result);
    }
}

pom.xml

프로젝트 메타데이터와 테스트를 위한 JUnit 의존성을 추가합니다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example.demo</groupId>
    <artifactId>manual-maven-demo</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

3. mvn compile: 소스 코드 컴파일

mvn compile 명령어는 src/main/java 경로의 소스 코드를 컴파일하여 바이트코드(.class)로 변환합니다. 최초 실행 시에는 Maven 중앙 저장소에서 필요한 플러그인과 의존성을 다운로드합니다.

컴파일이 성공하면 프로젝트 루트에 target 디렉터리가 생성되며, 그 하위에는 다음과 같은 폴더가 만들어집니다.

  • target/classes: 메인 소스 코드의 컴파일 결과물
  • target/maven-status: 빌드 플러그인의 상태 정보
$ mvn compile
[INFO] Scanning for projects...
[INFO] Building manual-maven-demo 1.0.0-SNAPSHOT
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /path/to/project/target/classes
[INFO] BUILD SUCCESS

4. mvn test: 단위 테스트 실행

mvn testsrc/test/java에 있는 테스트 코드를 컴파일하고 실행합니다. 이 단계에서는 Surefire 플러그인이 사용되며, 테스트 결과 보고서가 생성됩니다.

실행 후 target 디렉터리에 다음 경로가 추가로 생성됩니다.

  • target/test-classes: 테스트 소스 코드의 컴파일 결과물
  • target/surefire-reports: 테스트 실행 결과 및 로그 파일
$ mvn test
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) ---
[INFO] Surefire report directory: /path/to/project/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.example.demo.MessageServiceTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.05 sec

Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

[INFO] BUILD SUCCESS

5. mvn package: 아카이브 패키징

mvn package 명령어는 컴파일과 테스트를 모두 거친 후, 결과물을 배포 가능한 형태(예: JAR, WAR)로 묶습니다. 현재 프로젝트는 JAR로 패키징되도록 설정되어 있습니다.

빌드가 완료되면 target 디렉터리에 아카이브 파일과 관련 메타데이터 폴더가 생성됩니다.

  • target/manual-maven-demo-1.0.0-SNAPSHOT.jar: 최종 빌드된 JAR 파일
  • target/maven-archiver: JAR Manifest 등 아카이브 관련 메타데이터
$ mvn package
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) ---
[INFO] Building jar: /path/to/project/target/manual-maven-demo-1.0.0-SNAPSHOT.jar
[INFO] BUILD SUCCESS

$ ls -l target/
drwxr-xr-x  classes/
drwxr-xr-x  maven-archiver/
drwxr-xr-x  maven-status/
drwxr-xr-x  surefire-reports/
drwxr-xr-x  test-classes/
-rw-r--r--  manual-maven-demo-1.0.0-SNAPSHOT.jar

태그: maven java JUnit BuildLifecycle POM

6월 6일 17:49에 게시됨