2009-12-29 6 views
8

제대로 자바 클래스 패스와 JAVA_HOME을 설정. 매우 간단한 Helloworld 예제를 사용하고 있으며 이미 인터넷에 존재하는 수백만 개의 응답을 통해 내 CLASSPATH 및 JAVA_HOME 변수가 잘못 설정되었다는 것을 알 수 있습니다.내가 시도하고 우분투에 컴파일 된 클래스를 실행하면 나는 오류</p> <blockquote> <p>Exception in thread "main" java.lang.NoClassDefFoundError:</p> </blockquote> <p>무엇입니까 우분투

그러나, 나는 올바른 폴더에 등/환경뿐만 아니라 현재 폴더 편집 한 :

PATH=".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

JAVA_HOME="/usr/lib/jvm/java-1.5.0-sun/"

CLASSPATH=".:/usr/lib/jvm/java-1.5.0-sun/lib"

을 내가 설정 명령을 입력 할 때 나타납니다. 어떤 경우에도 클래스 패스를 수동으로 설정하더라도

sudo java -cp . myfirstjavaprog.class

나는 같은 오류가 발생합니다. 내가 어디에서 볼까? 이는 구성 문제 여야합니다.

많은 감사합니다.

+0

http://www.cyberciti.biz/faq/set-environment-variable-linux/ –

답변

6

끝에서 .class를 삭제하려고합니다. 그냥 입력하십시오 ...

java -cp . myfirstjavaprog 
+0

나는 이것을 보지 못했을 정도로 우울합니다. – Huguenot

+4

우리에게 최선을 다합니다. – Pace

1

아니오, CLASSPATH 환경 변수가 무시되는 것 같습니다.

올바른 방법은 컴파일하고 실행할 때 -classpath 옵션을 사용하는 것입니다. 각각의 프로젝트마다 설정하십시오. 당신의 눈앞에있는 증거가 당신에게 그렇게 알려줍니다.

왜 CLASSPATH가 무시됩니까? 몇 가지 이유 :

  1. 이는 Java 1.0 아티팩트가 아닙니다.
  2. JVM은 사용자가 환경 변수로 설정했다고 보장하지 않습니다.
  3. IDE에는 자체 요구 사항이 있으므로 IDE에 의존하지 않습니다.
  4. Java EE 애플리케이션 서버는 자체 요구 사항을 가지고 있으므로 의존하지 않습니다.
  5. 모든 프로젝트가 다를 수 있으므로 항상 전체 경로를 지정해야합니다. "Hello, World"를 지나서 진행하면 스크립트 또는 Ant 및 Maven과 같은 도구를 사용하여 프로젝트의 CLASSPATH를 설정할 수 있습니다.
+0

이것은 나쁜 생각 일 것입니다. 왜냐하면 매번 그가 전체 경로를 제공해야하기 때문입니다. – Anand

+0

클래스 경로 환경 변수가 무시되는 이유는 무엇입니까? – Huguenot

+0

@ lakshamanan - 잘못되었습니다. 그는 커맨드 라인에서 컴파일 및 실행되지 않을 미래 프로젝트에 적합한 방식으로이를 수행하는 방법을 배워야 할 것입니다. – duffymo

5

나는 강하게 CLASSPATH 환경 변수를 제거하기 추천, 또는 적어도 그것의 당신의 JRE/JDK를 복용.

"."은 달리 지정되지 않는 한 클래스 경로에 내재적입니다. Java 1.3 이후로 Java는 javac/java 실행 파일의 실행 경로를 기반으로 자체 런타임 및 라이브러리를 찾을만큼 충분히 똑똑했습니다. 그 이후로, 철저히 잘못하지는 않았지만 클래스 패스에있는 클래스를 지정하는 것은 중복되었습니다. 확실하게 .../lib은 올바르지 않습니다. 거기에는 jar 파일 만 있기 때문에, 클래스는 없으며, 개별적으로 명시 적으로 이름이 지정되어 있지 않으면 classpath에서 선택되지 않습니다.

최신 javas는 클래스 패스의 루트 디렉토리에있을 때 java <classname>을 입력하면됩니다. 그냥 작동합니다 ™.

+0

당신은 확실히 똑같습니다. 스윙 구성 요소를 가져 와서 똑같은 오류가 발생하면 컴파일 할 때 문제가 발생했습니다. HelloWorld.java 예제는 괜찮습니다 ... 이것은 기괴한 것 같습니다. – Huguenot

+1

오 ... Windows는 기본적으로 Windows 시스템 클래스 경로에있는 실행 파일과 함께 절름발이가 심한 Java와 함께 제공됩니다. DOS 프롬프트에서 "java -version"을 실행하고 실행중인 Java 버전이 원하는 버전인지 확인하십시오! –

+1

동일한 일은 우분투라고 말할 수 있습니다. GNU java (Sun의 Java가 아닌 우분투 시스템 중 적어도 두 개)와 함께 제공되기 때문입니다. 'k, 그것은 심하게 불구가되지 않습니다 -하지만 그것은 Sun의 자바가 아닙니다. – NDP

1

사과와 오렌지를 섞고 있습니다. 명령 행에서 원시 java 또는 javac 호출은 클래스에 액세스 할 수있는 위치를 알 수있는 클래스 경로가 필요합니다. 실행할 때

java -cp pathelement1:pathelement2... MyClass 

실행 가능한 클래스를 찾을 수있는 장소 목록을 Java에 제공합니다. 그것은 당신이 말하지 않는 한 "."을 포함하여 어디에도 보이지 않을 것입니다. 그래서 "CLASSPATH는"당신이

java -cp $CLASSPATH MyClass 

Inotherwords를 실행하지 않으면 도움이되지 않습니다, 그것의 단지 바로 가기가 클래스 경로를 다시 입력 할 필요 유지합니다.

많은 프로그램이 JAVA_HOME을 사용하도록 구성되어 있지만 궁극적으로 실행중인 Java 프로그램은 구성된 클래스 경로와 java 경로를 필요로합니다. (JAVA_HOME 변수를 통해 찾을 수 있으므로 ant와 같은 경우에도 필요합니다. 개념적으로는 바로 가기 임).

PATH는 시스템이 바이너리를 찾는 경로입니다. java가 경로 상에 없다면 ("which java"를 입력하면 java가 경로 상에 있음을 나타낼 것입니다)/full/path/to/java를 실행하는 것은 "java"를 실행하는 것과 동일합니다. PATH 변수에서 이진을 찾습니다.

0

좋아, 내가 잘못된 장소에서 문제를 찾고 있었다. Java가 괜찮 았던 것으로 밝혀졌고 두 개의 개별 문제에 대해 동일한 오류가 발생하는 희생자였습니다.

원래 자바 웹 사이트에서 가져온 스윙 예제를 실행하려고했지만 패키지 정의가 있다는 것을 눈치 채지 못했습니다. 나는 정확한 폴더 구조를 설정했고 이제는 잘 돌아 간다.

HelloWorld 예제를 실행하려고했을 때 실수로 .class 확장자를 포함 시켰습니다.

이 두 가지 문제로 인해 ClassNotFound 오류가 발생했습니다.

많은 도움을 주셔서 감사합니다.

1

사용

sudo update-java-alternatives -s java-6-openjdk 

이 클래스 경로 물건을 많이 설정합니다.