youngfromnowhere

[Java] Java compile. 디렉토리 설정 옵션 본문

Java

[Java] Java compile. 디렉토리 설정 옵션

곽일땡 2022. 11. 25. 20:22

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가 간접 임포트된 코드를 다시 직접 컴파일 하지 않고 기존의 클래스파일을 불러오기만 하는 것을 방지하려면, 따로 클래스파일을 생성하는 디렉토리를 지정해주면 된다.