开发者

ResourceBundles outside a jar file

开发者 https://www.devze.com 2022-12-22 04:15 出处:网络
I\'m facing a problem when I need to distribute my java application, created using NetBeans 6.8. I have some translation files made with gettext as class files - made with msgfmt from gettext package

I'm facing a problem when I need to distribute my java application, created using NetBeans 6.8. I have some translation files made with gettext as class files - made with msgfmt from gettext package with the following script (shell script run under msys - no problems here)

PO_F开发者_运维百科ILES=`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

Here is the directory structure:

main.jar
lib/translate/Messages_fr$1.class
lib/translate/Messages_fr.class 
lib/*.jar (many needed libraries - they work)

The manifest file has the following class-path:

lib/xxx.jar ... lib/translate ... lib/yyy.jar (jar files are not the problem)

The application works without any problem except the translation files which cannot be loaded. The loading part is the following (the client wants a French translation):

Locale.setDefault(Locale.FRANCE);
myResources = ResourceBundle.getBundle("Messages");

Note: This problem appears only when trying to run with the jar file (running from NetBeans works well, running from command line the compiled classes work also but not when running the jar file (java -jar main.jar).

The funny part is that I don't have this problem if I modify the class-path from the manifest file and add "." path to the classpath and having this directory structure:

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

I am using Windows with the following Java versions:

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)

I appreciate any help as this becomes frustrating.

Thank you,

Iulian


The actual problem (as described in comments) was a missing / in the class path from the jar file. For example having only the path like this: path/myPath was not enough. I needed to add a / ( path/myPath/ ) to make it work

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号