jar文件外的ResourceBundles

时间:2010-03-09 14:38:09

标签: java jar gettext resourcebundle

当我需要分发使用NetBeans 6.8创建的Java应用程序时,我遇到了问题。我有一些使用gettext作为类文件制作的翻译文件 - 使用带有以下脚本的gettext包中的msgfmt(在msys下运行shell脚本 - 此处没有问题)

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)。 / p>

有趣的是,如果我从清单文件中修改类路径并添加“。”,我就没有这个问题。类路径的路径并具有此目录结构:

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)

我感谢任何帮助,因为这会令人沮丧。

谢谢,

尤利安

1 个答案:

答案 0 :(得分:1)

实际问题(如评论中所述)是来自jar文件的类路径中的缺失/。例如,只有这样的路径:path / myPath是不够的。我需要添加/(path / myPath /)才能使其正常工作