youngfromnowhere
[Java] Java compile. 디렉토리 설정 옵션 본문
https://youngnowhere.tistory.com/37
[Java] 수동 컴파일할 때, 소스코드 수정사항이 반영되지 않는 경우
https://youngnowhere.tistory.com/36 [Git] 원격저장소 clone 후 Java compile 오작동 Git, Github으로 미니프로젝트를 진행하다가.. compile에 수정사항이 반영되지 않는것을 발견했다. 또, 한 branch에서 생성된 class fi
youngnowhere.tistory.com
위 글에서 Java 컴파일러는 '직접 임포트된' 소스코드가 수정되지 않는 한
'간접적으로 임포트된' 소스코드를 다시 컴파일 하는게 아니라
이미 만들어진 클래스 파일을 불러오기만 한다는 점을 살펴봤다.
Test01.java와 Test02.java를 초기상태로 돌려놓고
Test 디렉토리 안에 out/과 src/ 디렉토리를 만들어
코드를 src/ 안에 몰아넣었다.
javac 의 -d 옵션으로 class 파일들을 Test/out 디렉토리에 만들도록 지정하고 (컴파일은 Main.java가 있는 Test/src에서 이루어지기 때문에 상대 경로는 ../out/이 된다.) 컴파일 했다. 컴파일 이후에도 src 디렉토리에는 소스코드 파일만 존재하고
out 디렉토리 안에 똑같은 package structure가 만들어지고 클래스 파일들이 생성된걸 볼 수 있다.
../out/으로 이동하여 Main 실행 : 정상작동
../src/로 돌아와서 Test02.java 수정
다시 ../out/으로 디렉토리 설정후 컴파일 후 실행
Test02.java 수정 내용이 반영된 것을 볼 수 있다.
한번더 확인해보자. Test02.java를 또 수정한 뒤
다시 컴파일, 실행.
이번에도 반영된 것을 볼 수 있다.
결론 :
Java Compiler가 간접 임포트된 코드를 다시 직접 컴파일 하지 않고 기존의 클래스파일을 불러오기만 하는 것을 방지하려면, 따로 클래스파일을 생성하는 디렉토리를 지정해주면 된다.
'Java' 카테고리의 다른 글
[Java] Call-by-Value/Call-by-Address/Call-by-Reference (0) | 2022.12.05 |
---|---|
[Java] 의도한대로 작동하지 않은 clearScreen() (0) | 2022.11.30 |
[Java] 수동 컴파일할 때, 소스코드 수정사항이 반영되지 않는 경우 (0) | 2022.11.25 |
[Java] Abstract Class 간단한 메모 (0) | 2022.11.18 |
[Java] Bitwise 논리연산자의 우선순위 (0) | 2022.11.08 |