2015-03-09 2 views
1

Я ввел мое приложение в jython-standalone-2.7-b4.jar. Вот то, что я вижу в Webstart консоли клиентской машине, когда я Webstart мое приложение:Jython 2.7b4 не будет webstart: ImportError: Нет модуля с именем site

Java Web Start 11.31.2.13 
Using JRE version 1.8.0_31-b13 Java HotSpot(TM) 64-Bit Server VM 
User home directory = C:\Users\me 
... 
#### Java Web Start Error: 
#### null 

Когда я нажимаю на «Подробнее», я считаю следующий стек исключений след:

ImportError: No module named site 

    at org.python.core.ImportError(Py.java:328) 
    at org.python.core.imp.import_first(imp.java:842) 
    at org.python.core.imp.load(imp.java:695) 
    at org.python.util.PythonInterpreter.<init>(PythonInterpreter.java:118) 
    at org.python.util.PythonInterpreter.<init>(PythonInterpreter.java:94) 
    at org.python.util.InteractiveInterpreter.<init>(InteractiveInterpreter.java:39) 
    at org.python.util.InteractiveInterpreter.<init>(InteractiveInterpreter.java:28) 
    at org.python.util.InteractiveConsole.<init>(InteractiveConsole.java:67) 
    at org.python.util.InteractiveConsole.<init>(InteractiveConsole.java:53) 
    at org.python.util.InteractiveConsole.<init>(InteractiveConsole.java:33) 
    ... 

Jython2 .7b1 работал для меня. Я попробовал Jython2.7b3, но это тоже не удается.

ответ

1

Из-за различий загрузчика классов в среде Web Start, Jython не может найти файлы в каталоге Lib внутри автономного файла jar. Чтобы исправить это, вам нужно немного изменить содержимое отдельной банки. Следующий скрипт преобразует автономную баночку в нечто работоспособное в среде Web Start:

#!/bin/sh 
# Converts a Jython standalone jar into something usable with Java Web Start 
if [ -z $1 ]; then 
    echo "Please give the path to the standalone jar as the first argument." 
    exit 1 
fi 

CURRDIR=$(pwd) 
JAR_PATH="$CURRDIR/$1" 
CONVERTED_JAR_PATH="$CURRDIR/jython-webstart.jar" 
TEMPDIR=$(mktemp -d) 
cd "$TEMPDIR" 
jar xf "$JAR_PATH" 
rm -rf Lib/test # including Jython's own unit tests is pointless 
java -jar "$JAR_PATH" -m compileall Lib 
find Lib -name "*.py" -delete 
mv Lib/* . 
rmdir Lib 
jar cf "$CONVERTED_JAR_PATH" * 
rm -rf "$TEMPDIR" 

Далее вы, вероятно, столкнетесь с Jython bug 2283. Чтобы обойти это, установите системное свойство python.home, чтобы указать на любой существующий каталог.

+0

Это решает проблему с веб-сервером. Я сталкиваюсь с совершенно другой проблемой, которую можно обойти, возвращаясь к Jython2.7b3. –