Programming-[Backend]/Java

자바 기초 강의 정리 - 8. 클래스 패스, JAR

컴퓨터 탐험가 찰리 2024. 7. 15. 20:28
728x90
반응형


인프런 얄코의 제대로 파는 자바 강의를 듣고 정리한 내용이다.

 

중요하거나 실무를 하면서 놓치고 있었던 부분들 위주로만 요약 정리한다.

자세한 내용은 강의를 직접 수강하는 것이 좋다.

https://www.inflearn.com/course/%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%8C%8C%EB%8A%94-%EC%9E%90%EB%B0%94/dashboard

 

 


 

 

1. 소스패스, 클래스 패스

 

현재 위치, 패키지 위치 정보 등을 나타낸다.

 

  • 컴파일 시: -sourcepath 옵션을 주어 소스패스를 사용한다.
  • 실행 시: -classpath 또는 -cp 옵션을 주어 클래스패스를 사용한다.

 

소스 패스 예제

소스 패스와 관련한 예제를 살펴본다. 아래 명령어를 실행하면 java의 compiler가 Main.java 파일을 Main.class로 만들어준다. test라는 패키지 안에 Main.java 파일이 작성되어 있는 경우를 가정하였다.

 

javac test/Main.java

 

하지만, src보다 상위 경로로 들어가서, Main.java의 상대 경로로 실행하면 에러가 난다.

 

cd ..
javac src/test/Main.java   // 에러 발생

 

이를 해결하기 위해 -sourcepath 옵션을 주어 소스패스 위치를 지정해주면 정상적으로 컴파일 되는 것을 확인할 수 있다.

 

javac -sourcepath src src/test/Mian.java

 

 

만약 compiled 라는 이름을 갖는 폴더에 컴파일을 하고 싶으면 -d 옵션을 주면 된다.

 

javac -d compiled -sourcepath src src/test/Main.java

 

 

클래스 패스 예제

 

만약 compiled 디렉토리 위치가 아래 그림처럼 src 외부에 있는 상태라면 프로젝트 루트 디렉토리 (java-practice/)에서 아래 java 명령어 실행 시 에러가 발생한다.

 

 

java compiled test/Main

 

 

 

해결하기 위해서 -classpath 옵션을 주어야한다. src 디렉토리가 아닌 따로 지정하는 클래스 패스로 실행하라는 의미가 된다.

java -classpath compiled test/Main

 

 

만약 Hello 라는 클래스를 Main 클래스에서 아래와 같이 사용하고 있는 경우라고 가정하면,

 

 

포함된 클래스인 Hello 클래스도 실행되어야 하기 때문에 java 명령어에 지정되어야한다. 그런데 Hello 클래스는 copmiled/test가 아니라 compiled/add/test/ 하위에 있기 때문에 classpath를 여러 개 주어야 정상작동한다.

 

윈도우는 ; 로 구분하고, 맥/리눅스는 : 으로 구분하여 여러 classpath를 줄 수 있다.

java -cp compiled:compiled/add test/Main

 

compiled 내부의 test/Main을 클래스패스로 지정하고, compiled/add도 참조하는 것이 된다. 즉 Hello는 copmiled/add로 찾는다.

 

 

 

2. JAR

 

JAR 파일은 클래스, 메타데이터, 리소스 파일 등을 .jar로 압축하여 다른 곳에서 사용할 수 있도록 하는 것이다. 다른 곳에서 제공하는 라이브러리들도 .jar 형태로 제공된다.

 

 

2.1 Jar 파일 생성

.jar 파일로 만들기 위해서는 .java 파일들을 Build해서 .class 파일들로 만들어줘야한다.

 

빌드 후에는 아래 처럼 명령어를 실행하여 .jar 파일로 만들 수 있다.

 

jar cf {jar 파일명} -C {명령어 실행 디렉토리} {포함할 디렉토리}

 

  • c : JAR 파일 생성
  • f : 생성할 파일의 이름 지정
  • -C : 명령어를 실행할 디렉토리 수정 -> 패키지 위치에서가 아니라 다른 위치에서 실행할 때 주는 옵션이다.

 

2.2 Jar 파일 확인

Jar 파일 내부 클래스들을 확인할려면 아래 명령어를 실행한다.

jar tf {jar 파일명}

 

 

Jar 파일의 압축을 풀려면 아래 명령어를 실행한다.

jar xf {jar 파일명}

 

 

2.3 Jar 파일 import

생성한 jar 파일을 import 할려면, intelliJ 기준으로는 project structure -> modules -> Dependencies -> '+' 버튼을 눌러 .jar 파일을 추가해주면 된다. 그럼 만들어진 jar 파일 내부에 있는 클래스들을 활용할 수 있게 된다.

 

이렇게 하면 프로젝트의 .iml 파일에도 import 해온 .jar 파일이 적혀있는 것을 확인할 수 있다.

 

2.4 Jar 파일 실행

실행을 위해서는 아래 명령어대로 입력하면 된다. -cp는 앞에서 배운 것처럼 클래스 패스를 지정해주는 것이다.

java -cp {jar 파일명} {Main 파일 패키지 위치}

 

 

이렇게 직접 하는게 아니라 실행가능한 파일로 만들려면 아래 명령어처럼 e 옵션을 주고 미리 위치를 지정해주면 된다.

 

jar cfe {jar 파일명} {Main 파일 패키지 위치} -C {결과 파일을 저장할 위치}

 

 

이렇게 만들어진 파일은 아래 명령어로 실행할 수 있다.

java -jar {jar 파일명}

 

이 실행 가능한 파일을 xf 명령어로 압축을 풀고, META-INF/MANIFEST.MF 파일의 내용을 확인해보면 Main-Class 위치가 어떻게 되어있는지 볼 수 있다.

 

 

상기 과정은 intelliJ의 Artifacts 기능을 사용하여 GUI로 할 수도 있다.

 

Project Structrue -> Artifacts -> Add(+ 버튼) -> JAR -> From modules with dependencies...

 

Main 클래스를 지정해준다.

 

이후 Build -> Build Artifacts를 진행해주면 된다.

728x90
반응형