자료는 항아리 파일 외부에 있습니다
-
18-09-2019 - |
문제
NetBeans 6.8을 사용하여 생성 된 Java 응용 프로그램을 배포해야 할 때 문제에 직면 해 있습니다. GetText 패키지에서 MSGFMT로 만든 GetText로 만든 번역 파일이 있습니다. 다음 스크립트가 있습니다 (MSYS에서 실행되는 쉘 스크립트 - 여기에 문제 없음).
PO_FILES=`find . -iname "*_*.po"`
rm -f *.class
for PO_FILE in $PO_FILES; do
CLASS_NAME=`echo $PO_FILE | sed "s/\.po$//" | sed "s/^.*\///"`
echo "Compiling $PO_FILE to class $CLASS_NAME"
msgfmt --java2 $PO_FILE -r $CLASS_NAME -d .
done
디렉토리 구조는 다음과 같습니다.
main.jar
lib/translate/Messages_fr$1.class
lib/translate/Messages_fr.class
lib/*.jar (many needed libraries - they work)
매니페스트 파일에는 다음 클래스 경로가 있습니다.
lib/xxx.jar ... lib/translate ... lib/yyy.jar (jar files are not the problem)
로드 할 수없는 번역 파일을 제외하고 응용 프로그램은 문제없이 작동합니다. 로딩 부분은 다음과 같습니다 (클라이언트는 프랑스어 번역을 원한다).
Locale.setDefault(Locale.FRANCE);
myResources = ResourceBundle.getBundle("Messages");
참고 :이 문제는 JAR 파일로 실행하려고 할 때만 나타납니다 (NetBeans에서 실행되는 것은 잘 작동합니다. 명령 줄에서 실행됩니다. 컴파일 된 클래스도 작동하지만 JAR 파일 (java -jar main.jar)을 실행할 때도 작동하지 않습니다.
재미있는 부분은 매니페스트 파일에서 클래스 경로를 수정하고 ""를 추가하면이 문제가 없다는 것입니다. 클래스 경로로가는 길 과이 디렉토리 구조 :
main.jar
lib/translate/Messages_fr$1.class
lib/translate/Messages_fr.class
lib/*.jar (many needed libraries - they work)
Messages_fr$1.class
Messages_fr.class
다음 Java 버전과 함께 Windows를 사용하고 있습니다.
C:\>java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
D:\Program Files\Java\jdk1.6.0_17\bin>java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
이것이 실망스러워지면 도움이됩니다.
고맙습니다,
iulian
해결책
실제 문제 (주석에 설명 된 바와 같이)는 JAR 파일의 클래스 경로에서 누락 /에 있습니다. 예를 들어 다음과 같은 경로 만있는 경우 : Path/MyPath로는 충분하지 않았습니다. 작동하기 위해/ (Path/ MyPath/)를 추가해야했습니다.
제휴하지 않습니다 StackOverflow