2010-03-14 2 views
31

Sun 설명서와 Stack Overflow에 관한 많은 게시물을 읽었지만 Java 컴파일러 옵션 -cp-sourcepath 사이의 차이점에 대해서는 여전히 혼란 스럽습니다.javac의 클래스 경로와 소스 경로 옵션의 차이점

하자 내가이 디렉토리 구조가 있다고 가정 :

c:\Java\project1\src (where the Java source files are) 
c:\Java\project1\bin (where the Java class files will be or already are) 

가의하자를 또한 내가 패키지 com.mypackage에서 소스 파일 MainClass.java가 있다고 가정하고, 디렉토리 구조는 소스 폴더의 확인이다.

은 내가 프로젝트 1 디렉토리에있어 실행 :

javac -d bin -sourcepath src src/com/mypackage/MainClass.java 

또는

javac -d bin -classpath src src/com/mypackage/MainClass.java 

와 나는 같은 결과를 얻을 수 있습니다. 자세한 정보 표시 모드에서 소스 파일의 검색 경로는 두 경우 모두 src입니다.

누구든지이 옵션의 세부 사항을 파악할 수 있다면 좋을 것입니다.

  • 클래스 경로를 컴파일하는 코드의 루트입니다

  • 답변

    21
    -classpath classpath 
    

    CLASSPATH 환경 변수에서 사용자 클래스 경로를 무시하고 사용자 클래스 경로를 설정하십시오. CLASSPATH 또는 -classpath가 지정되지 않으면 사용자 클래스 경로는 현재 디렉토리로 구성됩니다.

    -sourcepath 옵션을 지정하지 않으면 클래스 파일뿐만 아니라 소스 파일도 사용자 클래스 경로에서 검색됩니다.

    -sourcepath sourcepath 
    

    는 클래스 또는 인터페이스 정의를 검색하는 소스 코드의 경로를 지정합니다. 사용자 클래스 경로와 마찬가지로 소스 경로 항목은 세미콜론 (;)으로 구분되며 디렉토리, JAR 아카이브 또는 ZIP 아카이브 일 수 있습니다. 패키지가 사용되는 경우 디렉토리 또는 아카이브 내의 로컬 경로 이름은 패키지 이름을 반영해야합니다.

    클래스 경로를 통해 발견 된 클래스는 소스가 발견되면 자동으로 재 컴파일됩니다.

    +2

    답변 해 주셔서 감사합니다. 마지막 문장은 내가 찾고 있던 것이다 : cp에서 찾을 수있는 소스 파일의 자동 재 컴파일. bin 디렉토리에서 .class 파일의 수정 날짜를 확인했으며이 원칙을 따릅니다! 2 가지 옵션의 큰 차이점은 다음과 같습니다. 컴파일 시간도이 단서를 제공합니다. 고맙습니다! – Alex

    7
    • 원본 경로가 할 수있는 코드를 포함뿐만 아니라 라이브러리는
    +0

    답장을 보내 주셔서 감사합니다. – Alex

    4

    CLASSPATH는 컴파일러와를 찾기 위해 클래스 로더를 알 필요 .class 파일이 필요합니다.

    원본 경로는 너무 많이 사용하지 않습니다. 보통 현재 디렉토리가 소스 경로이기 때문에 선택적이라고 생각합니다. CLASSPATH가 아닙니다.

    1
    • 클래스 경로는 클래스 (을 .class)를 검색
    • 원본 경로가 .a.k (소스 (된 .java) 파일을 검색하는 파일입니다.클래스 또는 인터페이스 원본 경로를 지정하지 않으면

    그러나, 클래스 패스는 클래스 파일과 소스 파일을 모두 검색됩니다 정의).

    이렇게하면 classpath를 사용하고 sourcepath를 피함으로써 거의 항상 간단하게 유지할 수 있다고 생각합니다.

    classpath와 sourcepath를 모두 사용해야하는 사람들은 아마도 이상한 디렉토리 내용을 타겟팅하고있을 것입니다. 예를 들어 소스 파일과 클래스 파일을 포함하지만 원본 파일 만 검색하려는 폴더가있을 수 있습니다.

    관련 문제