푸르
10
2018-12-04 01:05:58 작성 2018-12-04 01:09:14 수정됨
3
163

자바 클래스패스에 대해서 질문있습니다.


대충 알고 넘어가던 클래스패스에 대해서 공부를 다시 해봤습니다.


제가 공부한 바로는

1. 자바 가상머신은 클래스패스에 설정된 경로에서 컴파일된 클래스파일을 찾는다.

2. 그래서 클래스파일을 실행시킬때 현재 디렉토리가 아닌 곳에 사용할 클래스가 위치했다면, 그 디렉토리를 명시한다.

3. 이 클래스패스를 환경변수에 선언해두면, 클래스파일을 실행할떄마다 클래스패스를 명시하지 않아도 된다.


이렇습니다..

그래서 제가 자바를 멋모르고 처음 설정했을 당시에 한 환경변수와, 실제 클래스파일이 컴파일 되는 위치를 찾아보았습니다.

(저는 우분투에서 인텔리제이를 사용하고 있습니다.)


일단 /etc/profile 파일 하단에 아래와 같이 한줄이 명시 되어있습니다.

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

근데 여기선 자바가 위치한 자바홈만 명시되어있고, 클래스 패스는 어디에도 명시되어 있지 않았습니다. (띠용..)

그리고 실제로 자바 프로젝트들의 클래스파일들은

src폴더가 존재하는 곳에서 out/products 폴더에 위치하고 있었구요.


주절이 말이 긴데요. 질문을 정리하자면 아래와 같습니다.

Q1) (윈도우 처럼) 클래스패스를 실제로 명시하지 않은것 같은데 환경변수로 설정한 클래스 패스 설정은 어딨는거죠? 

Q2) out/production 이라는 폴더는 어디서 설정된거죠? IDE가 임의로 넣어주는건가요? 아니면 설정을 따로 한건가요?

0
0
  • 답변 3

  • 엔카나
    291
    2018-12-04 01:16:51
    IDE 의 경우 실행할때 클래스패스를 자동으로 설정해주죠.
    0
  • fender
    11k
    2018-12-04 06:27:15

    클래스패스를 글로벌 환경변수로 설정하는 건 해당 머신의 모든 자바 프로그램과 프로젝트에 영향을 줄 수 있기 때문에 피하는 것이 좋습니다.

    윈도우즈에서도 마찬가지로 클래스패스를 전역으로 설정했다면 이는 좋지 못한 관행입니다.

    1
  • 앙앙이
    3k
    2018-12-04 06:53:51

    자바 초창기 클래스 패스 환경 변수로 잡아야 했는데

    요즘은  IDE 에서 자동 잡아주고

    빌드 도구에서도 자동 잡아주니

    특별나게 잡지 않아도 됩니다.


    클래스 패스와 마찬가지로

    컴파일된 결과물인 .class 파일들 저장 위치는

    IDE 마다 내부적으로 정해져  있습니다.


    Tomcat 같은 경우 클래스 패스를 정의한 환경 변수를 뭉개버립니다.  이럴수 밖에 없는 이유를  생각해 보시기 바랍니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.