Пакеты ресурсов вне файла jar
-
18-09-2019 - |
Вопрос
Я сталкиваюсь с проблемой, когда мне нужно распространять мое java-приложение, созданное с использованием NetBeans 6.8.У меня есть несколько файлов перевода, созданных с помощью 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).
Самое смешное, что у меня не возникнет этой проблемы, если я изменю путь к классу из файла манифеста и добавлю "." path к classpath и буду иметь такую структуру каталогов:
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
Я использую Windows со следующими версиями Java:
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 / ) , чтобы это заработало