[Java] Maven 프로젝트 생성 및 실행하는 방법.
2025. 3. 7. 09:32ㆍLanguage/java
728x90
728x90
Maven 설명.
- Java 프로젝트의 빌드, 테스트, 배포, 패키징을 자동화하는 도구.
- XML 기반의 POM (Project Object Model) 파일을 사용하여 프로젝트의 라이프사이클을 관리.
Maven 주요 기능.
기능 | 설명 |
의존성(Dependencies) 관리 | pom.xml에서 필요한 라이브러리(JUnit, Spring 등) 자동 다운로드 |
빌드(Build) 자동화 | $ mvn package 실행 시 프로젝트를 JAR/WAR로 패키징 |
테스트 자동 실행 | $ mvn test 실행 시 JUnit 테스트 실행 |
CI/CD 통합 | Jenkins 등과 연동 가능 |
표준 프로젝트 구조 제공 | src/main/java, src/test/java 등 표준 구조 사용 |
Maven 기본 명령어.
명령어 | 설명 |
$ mvn compile | Java 소스 코드 컴파일 (target/classes/에 .class 생성) |
$ mvn test | JUnit 테스트 실행 (target/test-classes/에 .class 생성) |
$ mvn package | JAR 또는 WAR 파일 생성 (target/ 폴더에 app-1.0-SNAPSHOT.jar 생성) |
$ mvn install | 로컬 저장소에 패키지 설치 (~/.m2/repository에 저장) |
$ mvn clean | 이전 빌드 결과 삭제 (target/ 폴더 삭제) |
작업 환경.
>wmic os get Caption, Version, OSArchitecture
Caption OSArchitecture Version
Microsoft Windows 10 Pro 64비트 10.0.19045

JDK 설치.
Download the Latest Java LTS Free
Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.
www.oracle.com
Maven 설치.
Download Apache Maven – Maven
Downloading Apache Maven 3.9.9 Apache Maven 3.9.9 is the latest release: it is the recommended version for all users. System Requirements Java Development Kit (JDK) Maven 3.9+ requires JDK 8 or above to execute. It still allows you to build against 1.3 and
maven.apache.org
JDK 와 Maven 환경 변수 설정 및 적용.


PATH 에 JAVA_HOME, MAVEN_HOME 추가 및 적용.
%JAVA_HOME%\bin
%MAVEN_HOME%\bin
JDK 와 Maven 설치 확인.
>java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
>mvn -v
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: C:\Program Files\Java\apache-maven-3.9.6
Java version: 1.8.0_271, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_271\jre
Default locale: ko_KR, platform encoding: MS949
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
VSCode(IDE)에서 제공하는 Extension Pack for Java(Java 개발 환경 확장팩) 주요 기능 설명.
- Java 코드 자동 완성 (Language Support for Java™ by Red Hat)
- Java 디버깅 (Debugger for Java)
- Java 테스트 실행 (Test Runner for Java)
- JUnit, TestNG 등의 Java 테스트 실행 및 결과 확인
- Maven 프로젝트 지원 (Maven for Java)
- Maven 프로젝트 지원 (pom.xml 관리, 빌드, 실행)
VSCode에서 Extension Pack for Java 설치.

CMD에서 >mvn archetype:generate ... 로 Maven 프로젝트 생성.
- -DgroupId=com.example → 패키지
- -DartifactId=app → 프로젝트 이름
- -DarchetypeArtifactId=maven-archetype-quickstart → Maven 기본 프로젝트 템플릿
- -DinteractiveMode=false → 입력 없이 자동 생성
>mvn archetype:generate -DgroupId=com.example -DartifactId=app -Darchetyfalse
[INFO] Scanning for projects...
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> archetype:3.3.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< archetype:3.3.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- archetype:3.3.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
Downloading from central: https://repo.maven.apache.org/maven2/archetype-catalog.xml
Downloaded from central: https://repo.maven.apache.org/maven2/archetype-catalog.xml (16 MB at 15 MB/s)
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: D:\codes\java\maven
[INFO] Parameter: package, Value: com.example
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: app
[INFO] Parameter: packageName, Value: com.example
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: D:\codes\java\maven\app
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.976 s
[INFO] Finished at: 2025-03-06T19:07:02+09:00
[INFO] ------------------------------------------------------------------------
생성된 Maven 프로젝트 디렉토리 구조.
>tree /a /f
\---app
| pom.xml
|
+---src
| +---main
| | \---java
| | \---com
| | \---example
| | App.java
| |
| \---test
| \---java
| \---com
| \---example
| AppTest.java
|
\---target
+---classes
| \---com
| \---example
| App.class
|
\---test-classes
\---com
\---example
AppTest.class
생성된 pom.xml 설명.
- Maven 프로젝트를 생성하면 자동으로 pom.xml(Project Object Model)이 생성됨.
- Maven이 프로젝트를 빌드하는 데 필요한 모든 정보를 포함.
>type pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>app</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
생성된 *.java 파일.
>type App.java
package com.example;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
>type AppTest.java
package com.example;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}
이전 빌드 결과 삭제 후 빌드 및 테스트 실행.
>mvn clean test
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------------< com.example:app >---------------------------
[INFO] Building app 1.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- clean:3.2.0:clean (default-clean) @ app ---
[INFO] Deleting D:\codes\java\maven\app\target
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ app ---
[WARNING] Using platform encoding (MS949 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\codes\java\maven\app\src\main\resources
[INFO]
[INFO] --- compiler:3.11.0:compile (default-compile) @ app ---
[INFO] Changes detected - recompiling the module! :source
[WARNING] File encoding has not been set, using platform encoding MS949, i.e. build is platform dependent!
[INFO] Compiling 1 source file with javac [debug target 1.8] to target\classes
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ app ---
[WARNING] Using platform encoding (MS949 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\codes\java\maven\app\src\test\resources
[INFO]
[INFO] --- compiler:3.11.0:testCompile (default-testCompile) @ app ---
[INFO] Changes detected - recompiling the module! :dependency
[WARNING] File encoding has not been set, using platform encoding MS949, i.e. build is platform dependent!
[INFO] Compiling 1 source file with javac [debug target 1.8] to target\test-classes
[INFO]
[INFO] --- surefire:3.2.2:test (default-test) @ app ---
[INFO] Using auto detected provider org.apache.maven.surefire.junit.JUnit3Provider
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.example.AppTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.022 s -- in com.example.AppTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.139 s
[INFO] Finished at: 2025-03-06T19:20:37+09:00
[INFO] ------------------------------------------------------------------------
생성된 테스트 결과 파일 확인.
>type app/target/surefire-reports/com.example.AppTest.txt
-------------------------------------------------------------------------------
Test set: com.example.AppTest
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.022 s -- in com.example.AppTest
>type app/target/surefire-reports/TEST-com.example.AppTest.xml
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report-3.0.xsd" version="3.0" name="com.example.AppTest" time="0.022" tests="1" errors="0" skipped="0" failures="0">
<properties>
<property name="sun.desktop" value="windows"/>
<property name="awt.toolkit" value="sun.awt.windows.WToolkit"/>
<property name="file.encoding.pkg" value="sun.io"/>
<property name="java.specification.version" value="1.8"/>
<property name="sun.cpu.isalist" value="amd64"/>
<property name="sun.jnu.encoding" value="MS949"/>
<property name="java.class.path" value="D:\codes\java\maven\app\target\test-classes;D:\codes\java\maven\app\target\classes;C:\Users\tmax\.m2\repository\junit\junit\3.8.1\junit-3.8.1.jar;"/>
<property name="java.vm.vendor" value="Oracle Corporation"/>
<property name="sun.arch.data.model" value="64"/>
<property name="user.variant" value=""/>
<property name="java.vendor.url" value="http://java.oracle.com/"/>
<property name="user.timezone" value="Asia/Seoul"/>
<property name="java.vm.specification.version" value="1.8"/>
<property name="os.name" value="Windows 10"/>
<property name="user.country" value="KR"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="sun.boot.library.path" value="C:\Program Files\Java\jdk1.8.0_271\jre\bin"/>
<property name="sun.java.command" value="C:\Windows\Temp\surefire8899476915709626672\surefirebooter-20250306192037049_3.jar C:\Windows\Temp\surefire8899476915709626672 2025-03-06T19-20-36_796-jvmRun1 surefire-20250306192037049_1tmp surefire_0-20250306192037049_2tmp"/>
<property name="surefire.test.class.path" value="D:\codes\java\maven\app\target\test-classes;D:\codes\java\maven\app\target\classes;C:\Users\tmax\.m2\repository\junit\junit\3.8.1\junit-3.8.1.jar;"/>
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="C:\Users\tmax"/>
<property name="user.language" value="ko"/>
<property name="java.specification.vendor" value="Oracle Corporation"/>
<property name="java.home" value="C:\Program Files\Java\jdk1.8.0_271\jre"/>
<property name="basedir" value="D:\codes\java\maven\app"/>
<property name="file.separator" value="\"/>
<property name="line.separator" value=" "/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="java.awt.graphicsenv" value="sun.awt.Win32GraphicsEnvironment"/>
<property name="surefire.real.class.path" value="C:\Windows\Temp\surefire8899476915709626672\surefirebooter-20250306192037049_3.jar"/>
<property name="sun.boot.class.path" value="C:\Program Files\Java\jdk1.8.0_271\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_271\jre\classes"/>
<property name="user.script" value=""/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="1.8.0_271-b09"/>
<property name="user.name" value="tmax"/>
<property name="path.separator" value=";"/>
<property name="os.version" value="10.0"/>
<property name="java.endorsed.dirs" value="C:\Program Files\Java\jdk1.8.0_271\jre\lib\endorsed"/>
<property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
<property name="file.encoding" value="MS949"/>
<property name="java.vm.name" value="Java HotSpot(TM) 64-Bit Server VM"/>
<property name="localRepository" value="C:\Users\tmax\.m2\repository"/>
<property name="java.vendor.url.bug" value="http://bugreport.sun.com/bugreport/"/>
<property name="java.io.tmpdir" value="C:\WINDOWS\TEMP\"/>
<property name="java.version" value="1.8.0_271"/>
<property name="user.dir" value="D:\codes\java\maven\app"/>
<property name="os.arch" value="amd64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="java.awt.printerjob" value="sun.awt.windows.WPrinterJob"/>
<property name="sun.os.patch.level" value=""/>
<property name="java.library.path" value="C:\Program Files\Java\jdk1.8.0_271\jre\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python\Scripts\;C:\Program Files\Python\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\NetSarang\Xshell 7\;C:\MinGW\bin;C:\Program Files\Java\jdk1.8.0_271\\bin;C:\Program Files\Java\apache-maven-3.9.6\bin;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Git\cmd;C:\Program Files\Git\bin;C:\Program Files\TortoiseGit\bin;C:\Program Files\Java\jdk1.8.0_271\bin;;C:\Microsoft VS Code\bin;."/>
<property name="java.vm.info" value="mixed mode"/>
<property name="java.vendor" value="Oracle Corporation"/>
<property name="java.vm.version" value="25.271-b09"/>
<property name="java.ext.dirs" value="C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="52.0"/>
</properties>
<testcase name="testApp" classname="com.example.AppTest" time="0.0"/>
</testsuite>
테스트 실행 후 생성된 두 가지 파일(.txt, .xml) 설명.
1.텍스트 기반 테스트 결과(com.example.AppTest.txt)
- JUnit 테스트 실행 로그를 텍스트 파일로 저장.
- 콘솔에 출력되는 테스트 결과가 그대로 저장됨.
- 사람이 확인할 수 있도록 로그 파일 형태로 보관.
2.XML 기반 테스트 결과(TEST-com.example.AppTest.xml)
- JUnit 테스트 실행 결과를 XML 파일로 저장.
- 시스템, CI/CD 도구(Jenkins, GitLab CI 등)가 읽고 분석할 수 있도록 설계됨.
728x90
728x90
'Language > java' 카테고리의 다른 글
[Java] JUnit 5 프레임워크로 테스트 코드를 작성하는 방법. (0) | 2025.03.17 |
---|---|
[Java] 파일의 값을 HTTP Header로 설정하는 방법. (0) | 2024.11.08 |
[Java] JSON의 Key를 파싱하고 Value를 파일로 저장하는 방법. (0) | 2024.11.02 |
[Java] jar 파일에 포함된 외부 라이브러리를 제거하는 방법. (0) | 2024.09.27 |
[java] 대칭 키(AES) 알고리즘을 사용해서 데이터를 Base64 방식으로 인코딩/디코딩하는 방법. (0) | 2022.11.16 |