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 test는 src/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