javac — Java 컴파일러
개발 / 빌드 / javac.html
Java 소스를 바이트코드(.class)로 컴파일하는 JDK 도구.
기본 정보
| 명령어 이름 | javac |
|---|---|
| 한 줄 소개 | Java 소스를 바이트코드(.class)로 컴파일하는 JDK 도구. |
| 제공 | OpenJDK |
| 공식 문서 | https://docs.oracle.com/en/java/javase/21/docs/specs/man/javac.html |
| 지원 운영체제 | Linux, macOS, Windows |
| 설치 여부 | JDK 설치 필요 |
| 분류 | 빌드·컴파일 (태그: 언어 툴체인 (태그: javac, Java, 컴파일, JDK)) |
이 명령어는 무엇인가?
javac는 .java 파일을 JVM이 실행하는 .class 바이트코드로 변환합니다. 결과는 플랫폼 독립적이지만, 실행에는 같은 주 버전 이상의 JRE/JDK가 필요합니다.
패키지 선언과 디렉터리 구조가 일치해야 하며, -d로 출력 디렉터리를 지정하면 패키지 경로가 자동 생성됩니다. 서로 참조하는 파일은 함께 지정해 컴파일하는 것이 안전합니다.
어떤 문제를 해결하는가?
- Java 소스를 컴파일해 바이트코드를 만들 때
- 패키지 구조를 유지하며 출력 디렉터리를 분리할 때
- 특정 릴리스(--release)로 호환성을 맞출 때
- 여러 소스를 한 번에 컴파일할 때
주요 기능
바이트코드 생성
소스 파일을 .class로 컴파일합니다.
- 활용 상황: 간단한 클래스를 시험할 때
- 얻는 결과: JVM에서 실행 가능한 결과가 나옵니다.
- 제한 사항: 실행은 java 명령으로 별도 수행해야 합니다.
출력 디렉터리
-d로 패키지에 맞는 디렉터리에 출력합니다.
- 활용 상황: 패키지가 있는 프로젝트를 빌드할 때
- 얻는 결과: classpath 구성이 단순해집니다.
- 제한 사항: 기존 출력물이 남아 있으면 혼동될 수 있습니다.
릴리스 대상 지정
--release로 API와 바이트코드 버전을 고정합니다.
- 활용 상황: 구버전 JVM과의 호환성이 필요할 때
- 얻는 결과: 상위 버전 API를 실수로 쓰는 문제를 막습니다.
- 제한 사항: 지정 릴리스에 없는 API는 컴파일 오류가 됩니다.
설치 및 실행
설치 여부 확인
javac -version
sudo apt install openjdk-21-jdk-headless # Debian/Ubuntu sudo dnf install java-21-openjdk-devel # Fedora
실제 사용 예제
단일 파일 컴파일
클래스 파일을 생성합니다.
javac Hello.java
java Hello
패키지 프로젝트
출력 디렉터리를 지정해 패키지 구조를 만듭니다.
javac -d out $(find src -name '*.java')
java -cp out com.example.Main
릴리스 고정
구버전 호환을 위해 릴리스를 지정합니다.
javac --release 17 -d out src/Main.java