Java

javac (java compile) source, target, encoding

sstdio.h·2015년 2월 5일·조회 6,602

자바 컴파일 명령어인 javac에서 사용할 수 있는 몇 가지 유용한 옵션입니다.

하위 JDK 버전에서도 실행되도록 컴파일하기

하위 JDK 버전에서도 실행되도록 하려면 -source, -target 옵션을 사용합니다.

예를 들어 Java 1.6에서 컴파일하지만 Java 1.5에서 실행 가능하도록 하려면 다음처럼 -source 1.5, -target 1.5 옵션을 지정하면 됩니다.

javac -source 1.5 -target 1.5 MyClass.java
-source <release>          Provide source compatibility with specified release
-target <release>          Generate class files for specific VM version

이 옵션을 사용할 때 다음과 같은 경고가 발생할 수 있습니다.

warning: [options] bootstrap class path not set in conjunction with -source 1.5

기본적으로는 이전 버전, 예를 들어 Java 1.5의 rt.jar 위치를 명시해 주어야 합니다. 지정하지 않으면 위와 같은 경고가 발생할 수 있습니다.

즉, -source-target은 소스 문법과 생성되는 클래스 파일의 대상 버전을 지정하는 옵션입니다. 하지만 컴파일할 때 참조하는 표준 라이브러리까지 자동으로 이전 버전으로 바꿔 주지는 않습니다. 따라서 실제로 하위 버전에서 실행할 목적이라면 해당 버전의 라이브러리와 함께 컴파일되는지도 확인하는 것이 좋습니다.

하위 버전에서 지원하지 않는 문법

또한 이전 버전에서 지원되지 않는 기능은 사용할 수 없습니다.

예를 들어 switch 문에서 문자열을 사용하는 기능은 Java 1.7 이상부터 사용할 수 있습니다. 그런데 -source 1.5를 사용한다면 다음과 같은 오류가 발생합니다.

error: strings in switch are not supported in -source 1.5
(use -source 7 or higher to enable strings in switch)

이 경우에는 소스 코드를 대상 버전에서 지원하는 문법으로 수정하거나, 실행 환경이 허용된다면 -source 값을 더 높은 버전으로 지정해야 합니다.

소스 파일 인코딩 지정하기

클래스 파일 실행 시 한글이 깨진다면 소스 파일 인코딩 문제일 수 있습니다. 이때는 -encoding 옵션을 사용하여 컴파일합니다.

-encoding <encoding>       Specify character encoding used by source files

예를 들어 소스 파일이 UTF-8로 저장되어 있다면 다음처럼 컴파일할 수 있습니다.

javac -encoding UTF-8 MyClass.java

컴파일 인코딩은 소스 파일이 실제로 저장된 인코딩과 맞아야 합니다. IDE, 편집기, 빌드 도구에서 사용하는 인코딩도 함께 확인하면 한글 깨짐 문제를 줄일 수 있습니다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.