목표
학습할 것
추가 과제
.java
파일을 .class
파일로 컴파일.java
파일 생성 후 javac <FileName>.java
커맨드 실행HelloWorld 파일 생성 및 HelloJava 클래스 작성
$ vi HelloWorld.java # .java 생성
class HelloJava
{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
컴파일
$ ll
-rw-r--r-- 1 max staff 107 5 11 23:52 [1] HelloWorld.java
# javac 커맨드로 컴파일
$ javac HelloWorld.java
$ ll
# HelloWorld.java 파일 내에 작성한 HelloJava 클래스가 파일로 생성: 바이트코드
-rw-r--r-- 1 max staff 425 5 11 23:53 [1] HelloJava.class
-rw-r--r-- 1 max staff 107 5 11 23:52 [2] HelloWorld.java
java <ClassName>
커맨드 사용$ java HelloJava
Hello World! # 실행 결과
.java
파일 > .class
(Java 바이트코드)-classpath(-cp, --class-path)
: 의존성 라이브러리나 클래스 파일 경로 지정-sourcepath(--source-path)
: 의존성 자바 파일 경로 지정부가 설명
.java
파일을 컴파일하기 위해서는 자바 파일의 의존성을 해결해야 함
classpath
옵션은.class
파일 경로를,
sourcepath
옵션은.java
파일 경로를 지정
-d
: 컴파일된 클래스 파일 저장 위치 지정-encoding
: 컴파일할 자바 파일의 인코딩 지정-nowarn
: 경고 보이지 않음-g
: 모든 디버깅 정보 생성-g:{lines,vars,source}
: 일부 디버깅 정보만 생성-g:none
: 디버깅 정보 생성하지 않음$ ll
-rw-r--r-- 1 max staff 107 5 11 23:52 [1] HelloWorld.java
drwxr-xr-x 3 max staff 96 5 24 01:36 [2] hello
drwxr-xr-x 3 max staff 96 5 24 01:35 [3] main
$ tree .
.
├── HelloWorld.java
├── hello
│ └── Hello.java
└── main
└── App.java
2 directories, 3 files
# Hello 클래스를 찾을 수 없어 에러 발생
$ javac -d . main/App.java
main/App.java:3: error: cannot find symbol
Hello.hello();
^
symbol: variable Hello
location: class App
1 error
# sourcepath 옵션 사용하여 컴파일
$ javac -d . -sourcepath ./hello main/App.java
$ ll
-rw-r--r-- 1 max staff 287 5 24 01:52 [1] App.class
-rw-r--r-- 1 max staff 392 5 24 01:52 [2] Hello.class
-rw-r--r-- 1 max staff 107 5 11 23:52 [3] HelloWorld.java
drwxr-xr-x 3 max staff 96 5 24 01:36 [4] hello
drwxr-xr-x 3 max staff 96 5 24 01:35 [5] main
$ java App
Hello World!
# App.class 파일 삭제
$ rm -rf App.class
$ ll
-rw-r--r-- 1 max staff 392 5 24 01:52 [1] Hello.class
-rw-r--r-- 1 max staff 107 5 11 23:52 [2] HelloWorld.java
drwxr-xr-x 3 max staff 96 5 24 01:36 [3] hello
drwxr-xr-x 3 max staff 96 5 24 01:35 [4] main
# classpath 옵션 사용하여 컴파일
$ javac -d . -classpath . main/App.java
$ ll
-rw-r--r-- 1 max staff 287 5 24 01:54 [1] App.class
-rw-r--r-- 1 max staff 392 5 24 01:52 [2] Hello.class
-rw-r--r-- 1 max staff 107 5 11 23:52 [3] HelloWorld.java
drwxr-xr-x 3 max staff 96 5 24 01:36 [4] hello
drwxr-xr-x 3 max staff 96 5 24 01:35 [5] main
$ java App
Hello World!