Programing

클래스 경로는 Linux에서 작동하지 않습니다.

lottogame 2020. 12. 11. 07:41
반응형

클래스 경로는 Linux에서 작동하지 않습니다.


누구나이 명령이 Windows에서 잘 작동하는 이유를 알고 있지만 Linux에서는 ClassNotFoundException game.ui.Main이 발생합니다.

java -cp ".;lib/*" game.ui.Main -Xms64m -Xmx128m

내 폴더 구조는 다음과 같습니다. lib /-Jars game /-클래스 파일

이것은 최신 Java 6입니다.


클래스 경로 구문은 OS에 따라 다릅니다. 에서 위키 백과 :

파일 시스템과 밀접하게 관련되어 있기 때문에 명령 줄 클래스 경로 구문은 운영 체제에 따라 다릅니다. 예를 들면 :

모든 Unix 유사 운영 체제 (예 : Linux 및 Mac OS X)에서 디렉토리 구조에는 Unix 구문이 있으며 콜론 ( ":")으로 구분 된 별도의 파일 경로가 있습니다.

Windows에서 디렉토리 구조에는 Windows 구문이 있으며 각 파일 경로는 세미콜론 ( ";")으로 구분해야합니다.

클래스 경로가 매니페스트 파일에 정의되어있는 경우에는 적용되지 않습니다. 여기서 각 파일 경로는 운영 체제에 관계없이 공백 ( "")으로 구분되어야합니다.


세미콜론을 콜론으로 변경해보십시오.

CLASSPATH 구분 기호는 플랫폼에 따라 다르며 java.io.File.pathSeparatorChar가 반환하는 문자와 동일합니다 .


Windows (예 : cygwin) 및 Linux 두 플랫폼에서 실행되는 스크립트에서 클래스 경로를 사용할 때 경로도 중요합니다. 이렇게 할 때 클래스 경로에 대해 이와 같은 함수를 포함합니다. '-w'옵션이있는 'cygpath'명령은 경로를 Windows 스타일 경로로 변환합니다. 따라서이 예제에서 "/home/user/lib/this.jar"는 "C : \ Cygwin \ home \ user \ lib \ this.jar"와 같은 형식으로 변환됩니다.

#!/bin/bash

function add_java_classpath() {
  local LOCAL1=$1
  if [ "$OSTYPE" == cygwin ]; then
    LOCAL1="$(cygpath -C ANSI -w $LOCAL1)"
  fi
  if [ -z "$JAVA_CLASSPATH" ]; then
    JAVA_CLASSPATH="$LOCAL1"
  elif [ "$OSTYPE" != cygwin ]; then
    JAVA_CLASSPATH="${JAVA_CLASSPATH}:$LOCAL1"
  else
    JAVA_CLASSPATH="${JAVA_CLASSPATH};$LOCAL1"
  fi      
}

add_java_classpath /home/user/lib/this.jar
add_java_classpath /usr/local/lib/that/that.jar

java -cp "${JAVA_CLASSPATH}" package.Main $@

Windows :

java -cp file.jar;dir/* my.app.ClassName

리눅스 :

java -cp file.jar:dir/* my.app.ClassName

상기 :

  • Windows 경로 구분자는 ;
  • Linux 경로 구분자는 :
  • Windows에서 cp 인수에 공백이 없으면 따옴표는 선택 사항입니다.

참고 URL : https://stackoverflow.com/questions/4528438/classpath-does-not-work-under-linux

반응형