2010-03-09 8 views
1

Je suis confronté à un problème lorsque j'ai besoin de distribuer mon application Java, créée à l'aide de NetBeans 6.8. J'ai quelques fichiers de traduction effectués avec gettext sous forme de fichiers de classe - fait avec msgfmt du package gettext avec le script suivant (script shell exécuté sous msys - aucun problème ici)ResourceBundles en dehors d'un fichier jar

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 

Voici la structure du répertoire:

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

le fichier manifeste a le chemin de classe suivante:

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

l'application fonctionne sans aucun problème, sauf les fichiers de traduction qui ne peuvent pas être chargés. La partie de chargement est le suivant (le client veut une traduction française):

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

Remarque: Ce problème apparaît uniquement lorsque vous essayez de courir avec le fichier jar (en cours d'exécution de NetBeans fonctionne bien, en cours d'exécution de la ligne de commande les classes compilées travailler aussi mais pas lors de l'exécution du fichier jar (java -jar main.jar)

La partie amusante est que je n'ai pas ce problème si je modifie le chemin de classe à partir du fichier manifeste et ajouter "." chemin d'accès au chemin de classe et ayant cette structure de répertoire:

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 

J'utilise Windows avec les versions Java suivantes:

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) 

J'apprécie toute aide que cela devient frustrant.

Merci,

Iulian

+0

Vous ne le croiriez pas ... ajoutant un/("lib/translate /" au lieu de "lib/translate") dans le fichier manifeste ça marche ... Comment pourrais-je faire ça à partir des fichiers ant XML? – INS

Répondre

1

Le problème réel (tel que décrit dans les commentaires) était un manque/dans le chemin de classe du fichier jar. Par exemple, avoir seulement le chemin comme ceci: path/myPath n'était pas suffisant. Je devais ajouter un/(chemin/myPath /) pour le faire fonctionner