Невозможно запустить проект Java, настроенный для использования Jython из JAR - PullRequest
2 голосов
/ 07 июля 2011

У меня есть проект Java, который использует библиотеку Jython.Я могу собрать код и выполнить его нормально либо в Eclipse, либо из командной строки, однако, когда я упаковываю проект в файл JAR, я получаю следующую ошибку:

ImportError: no Module named socket

Я знаю, что это за ошибкаозначает, и сокет является первым модулем в рассматриваемом скрипте Python.Почему это не запускается из файла JAR?Jython.jar также упакован в JAR, который я построил, поэтому я думаю, что он сможет найти его.Есть идеи?

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

У меня были похожие проблемы, пока я не обнаружил, что на самом деле есть два jar Jar - jython.jar и jython-standalone.jar. Автономный jar включает в себя все стандартные модули Python Lib. Использование этого, казалось, исправило мои проблемы с импортом.

1 голос
/ 07 июля 2011

При запуске из Eclipse (который управляет classpath для вас) или из командной строки (где, я полагаю, вы указываете classpath при запуске), вы включаете Jython.jar в classpath.

К сожалению, включая другие банки внутри вашей банки недостаточно для размещения этой банки на пути к классам. Вы можете извлечь весь Jython.jar и включить извлеченные файлы в ваш jar (более поздние версии Eclipse делают это при экспорте с опцией Runnable JAR File .

Однако это может привести к проблемам, если код Jython ожидал, что он будет в JAR, если были конфликты пространства имен или юридические проблемы (во многих случаях незаконно извлекать сторонний jar-файл и распространять его как свой собственный).

Чтобы подтвердить это, попробуйте запустить jar вне Eclipse, включая jython.jar в classpath. Например:

java -cp lib/jython.jar:myjar.jar com.me.main.Main

Имейте в виду, что если вы используете опцию -jar (например, атрибут основного класса), флаг -cp игнорируется, поэтому это не будет работать, если вы сделаете:

java -cp lib/jython.jar -jar myjar.jar

Если это проблема, то есть несколько способов автоматически включить jython.jar в classpath. Два популярных подхода - использовать атрибут classpath в манифесте (работает до тех пор, пока вы можете гарантировать местоположение jython.jar относительно вашего основного jar-файла) или обернуть выполнение вашего jar-файла в скрипт оболочки.

...