우분투에서 폴더에 대한 CLASSPATH 변수를 설정하는 방법


16

export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHCLASSPATH에 tools.jar을 추가 한다는 것을 알고 있지만 폴더를 CLASSPATH로 설정하고 싶습니다.

이처럼

export CLASSPATH=/usr/local/java/lib/:$CLASSPATH

그러나 작동하지 않습니다.

답변:


11

첫째, CLASSPATH일반적으로 env var를 설정하면 해결하는 것보다 더 많은 문제가 발생합니다. 모든 응용 프로그램이 동일한 클래스 경로를 원하거나 필요로하지는 않으며 바람직하지 않거나 필요없는 항아리가 클래스 경로에 포함되어 있으면 종종 중단됩니다. 자바 앱은 단지 필요한만큼의 항아리 만 포함해야합니다.

클래스 경로를 설정해야하는 특정 개별 앱이있는 경우 일반적으로 명령 행 옵션이 선호 java -cp path1:path2:...됩니다. 데스크탑 아이콘은 이러한 옵션을 포함하도록 명령을 변경하거나 이러한 옵션을 포함하도록 쉘 스크립트를 수정할 수 있습니다.

(그리고 규칙에 대한 예외는 항상 있기 때문에) java 버전에 따라 (Java 6 이상이 필요함) " *" 를 추가하여 jar의 전체 디렉토리를 클래스 경로에 추가하도록 지정할 수 있습니다. 디렉토리의 끝에서; 예를 들면 다음과 같습니다.

 /dir1/foo.jar:/dir2/dir3:/dir5/dir6/*:etc...

방법:

  • /dir1/foo.jar -(단일 항아리)가 클래스 경로에 추가됩니다.
  • /dir2/dir3-이 디렉토리에있는 모든 JAR되지 않은 클래스는 클래스 경로에 추가됩니다 (예 : 올바른 패키지 구조에 com.my.Foo.class있어야합니다 ( 예 :에 있어야 함 /dir2/dir3/com/my/Foo.class)).
  • /dir5/dir6/*-이 디렉토리의 모든 jar (예 /dir5/dir6/*.jar:)가 클래스 경로에 추가됩니다. 이 " *"은 와일드 카드가 아닙니다 ( f*.jar또는 사용할 수 없음 *.jar). "모든 병 추가"를 나타내는 특수 문자입니다.

일반적으로 jar의 전체 디렉토리를 애플리케이션의 클래스 경로에 추가해야하는 경우 앱이 올바르게 번들되지 않았습니다. 오히려 앱에는 종속 된 jar 목록이 포함 된 매니페스트가 있어야합니다. 또는 최소한 하나의 jar 만 클래스 경로에 추가해야하며 해당 jar은 하위 디렉토리의 jar 목록 전체를 표시 할 수 있습니다.


우분투 12.04에서 이것을 알아내는 데 5 시간 이상이 걸립니다. 파일을 컴파일하고 클래스를 실행 한 후에 두 가지가 중요합니다. 1. 수업에서 패키지를 사용하는지 여부. 그리고 패키지 상위 폴더에서 "java -cp. className"을 사용해야합니다. 2. "java -cp. : / usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / * : / dir2 / jarlib / *"와 같은 ". :"을 사용해야합니다.
zhihong 2016 년

@zhihong 당신은 netbeans와 같은 IDE를 사용하는 것을 고려해야하며, 실제로 사용중인 빌드 도구를 연기하여 실제로 클래스 경로를 구성합니다. Netbeans에서 maven 또는 gradle을 사용하여 새 프로젝트를 설정하십시오 (또는 개미-그러나 종속성을 처리 할 때 너무 복잡합니다 (아이비보다 선호하는 maven 개미 작업 참조). Gradle은 현재 '뜨거운'것입니다. 당신은 그것을 시도해야합니다. 또한 (1) 항상 패키지 이름을 사용해야합니다. (2) 클래스 경로의 jvm 디렉토리에 클래스를 포함시킬 필요가 없습니다. 그것들은 이미 "boot"클래스 경로에 있습니다.
michael

당신의 제안에 감사드립니다. 실제로, 나는 이클립스를 사용하고 코드가 올바르게 실행되지만 터미널에서 실행할 때 "ClassNotFoundException"이 발생합니다. 외부 lib / jar를 추가하는 여러 가지 방법을 시도했지만 모두 실패했습니다. 마지막으로 명령 행 WITH에 jvm 디렉토리와 외부 lib / jar를 포함시켜 작동합니다. 그러나 오늘 시도했지만, 당신은 맞습니다 .jvm 디렉토리는 필요하지 않습니다.
zhihong

2

classpath를 영구적으로 설정하려면 1) java가 설치된 위치를 찾으십시오. "java는 어디에 있습니까"를 사용할 수 있습니다 openjdk-7 / 6은 / usr / lib / jvm / .....에 있습니다.

2) / etc / environment에 CLASSPATH를 설정해야합니다

  sudo gedit /etc/environment

3) 다음과 같은 것을 추가하십시오 .. (타이핑하는 동안 공간을 남겨 두지 마십시오) (자바 버전 및 설치에 따라 사용자 정의하십시오) (이 홈 경로는 jdk 7을 엽니 다)

   JAVA_HOME="/usr/lib/jvm/java-7-openjdk-i386/bin"

   export JAVA_HOME

   CLASSPATH=".:/usr/lib/jvm/java-7-openjdk-i386/lib:/home/laptop/Desktop/a2"

   export CLASSPATH

":"으로 별도의 디렉토리


왜 모두가 "{JAVA_HOME} / lib"를 클래스 경로에 추가합니까? 필요하지 않거나 좋은 아이디어입니다. 그 문제에 대해 env CLASSPATH를 설정하는 것은 쉘 스크립트에 있지 않는 한 해당 스크립트에 대한 것이 아니라면 나쁜 생각입니다.이 경우 명령 행 옵션 "-cp"가 java로 계속 선호됩니다.
michael

0

열린 터미널 및 유형

sudo nano ~ / .bashrc

필요한 모든 내보내기를 추가하십시오 ...

수출 JAVA_HOME = / usr / local / java / jdk1.6.0_06 (경로)

수출 ANT_HOME = / opt / ant / apache-ant-1.9.4

변경 사항을 적용하려면 마지막으로 터미널을 다시 시작하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.