Java 클래스 컴파일과 Maven/Gradle 빌드의 전체 과정 이해하기

임유진·2025년 7월 2일

Java

목록 보기
1/12
post-thumbnail

🏗️ 1. 소스코드 작성

예를 들어 src/main/java/step02/TypeLab.java에 아래 코드가 있다고 가정합니다.

package step02;

class Person {
}

public class TypeLab {
    public static void main(String[] args) {
        System.out.println("Hello, Maven and Gradle!");
    }
}

package 선언
이게 바이트코드 파일 저장 경로를 결정합니다.

package step02;step02/ 폴더 생성


⚙️ 2. javac 단독 컴파일

명령어:

javac -d target/classes src/main/java/step02/TypeLab.java

✅ 이 과정에서:

  • Person.class
  • TypeLab.class

이 생성되어:

target
└── classes
    └── step02
        ├── Person.class
        └── TypeLab.class

에 저장됩니다.


🧩 3. Maven 빌드 과정

Maven은 pom.xml에 프로젝트 메타데이터를 정의합니다.

예시 pom.xml 핵심 부분:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>demo-project</artifactId>
  <version>1.0.0</version>

  <build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <outputDirectory>target/classes</outputDirectory>
  </build>
</project>

✅ Maven 빌드 명령:

mvn clean compile

✅ Maven 내부 동작:

  1. clean
  • target/ 폴더 삭제
  1. compile
  • src/main/java 소스 검색
  • javac로 컴파일
  • package에 맞춰 target/classes/패키지명/*.class 생성
  • 필요 시 의존 라이브러리도 다운로드(.m2/repository에 저장)

⚠️ Maven은 항상 target/ 디렉토리를 결과물 저장소로 사용합니다.

✅ 실행:

java -cp target/classes step02.TypeLab

🛠️ 4. Gradle 빌드 과정

Gradle은 build.gradle 파일에 스크립트를 작성합니다.

예시 build.gradle:

plugins {
    id 'java'
}

group = 'com.example'
version = '1.0.0'

sourceCompatibility = '17'
targetCompatibility = '17'

✅ Gradle 빌드 명령:

gradle clean build

또는

./gradlew clean build

✅ Gradle 내부 동작:

  1. clean
  • build/ 폴더 삭제
  1. build
  • compileJava

    • src/main/java 소스 검색
    • javac로 컴파일
    • build/classes/java/main/패키지명/*.class 생성
  • processResources (리소스 복사)

  • jar (JAR 파일 생성)

✅ 결과 폴더 구조:

build
├── classes
│   └── java
│       └── main
│           └── step02
│               ├── Person.class
│               └── TypeLab.class
├── libs
│   └── demo-project-1.0.0.jar

✅ 실행:

java -cp build/classes/java/main step02.TypeLab

또는 (JAR 실행)

java -cp build/libs/demo-project-1.0.0.jar step02.TypeLab

(단, main-class 메타데이터가 있어야 -jar 실행 가능)


🔄 전체 흐름 비교

단계MavenGradlejavac 직접 실행
소스 위치src/main/javasrc/main/java임의 경로
빌드 명령mvn clean compilegradle clean buildjavac
클래스 출력target/classesbuild/classes/java/main지정 폴더
의존성 관리pom.xmlbuild.gradle수동 JAR 추가
JAR 생성mvn packagegradle jar별도 실행

🧠 핵심 원리 요약

패키지 선언

  • .class 저장 경로를 지정합니다.

컴파일러(javac)

  • 바이트코드를 생성해 JVM이 읽을 수 있게 변환합니다.

Maven/Gradle

  • javac 호출 + 의존성 관리 + JAR 빌드 + 라이프사이클 관리
  • 표준 폴더(target, build)에 결과물을 생성합니다.

🚀 팁

  • Maven과 Gradle은 사실상 javac를 래핑(wrapping)하는 도구입니다.
  • 빌드 도구를 쓰면 의존성 관리와 아티팩트 배포가 훨씬 편리해집니다.
  • package 선언과 폴더 구조가 어긋나면 컴파일 에러가 납니다.
profile
말하는 고구마

0개의 댓글