jpype._jclass.NoClassDefFoundError: edu / stanford / nlp / python / SUTimeWrapper - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь использовать оболочку sutime python для нормализации даты, которая преобразует любую временную информацию в строках в даты в формате YYYY-MM-DD. Я создал класс с правилами для выходных данных sutime для преобразования выходных данных sutime в стандартный формат, как указано выше. Программа работает правильно на моем локальном компьютере, но когда я пытаюсь запустить ее на сервере, я получаю jpype._jclass.NoClassDefFoundError. Сервер на Ubuntu с Python2, в то время как мой локальный имеет Windows, с Python3.

Я пытался реализовать решения аналогичной проблемы на этом форуме https://sourceforge.net/p/jpype/discussion/379372/thread/689d7a9b/, но я не уверен, смог ли я правильно реализовать эти идеи. Я также проверил, что sutime поддерживает как python3, так и python2

Я думаю, что проблема в jpype или в библиотеке sutime.

This is the traceback that i got
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "date_normalizer.py", line 38, in __init__
    self.sutime = SUTime(jars=self.jar_files, mark_time_ranges=mark_time_ranges)
  File "/home/bridgei2i/.local/lib/python2.7/site-packages/sutime/sutime.py", line 57, in __init__
    'edu.stanford.nlp.python.SUTimeWrapper')
  File "/home/bridgei2i/.local/lib/python2.7/site-packages/jpype/_jclass.py", line 130, in __new__
    return _JClassNew(args[0], **kwargs)
  File "/home/bridgei2i/.local/lib/python2.7/site-packages/jpype/_jclass.py", line 213, in _JClassNew
    javaClass = _jpype.PyJPClass(arg)
jpype._jclass.NoClassDefFoundError: edu/stanford/nlp/python/SUTimeWrapper

1 Ответ

0 голосов
/ 11 июля 2019

Кажется вероятным, что файл jar, содержащий edu/stanford/nlp/python/SUTimeWrapper, не был найден на сервере. Конкретным кодом, который не удался, был вызов JClass('edu.stanford.nlp.python.SUTimeWrapper'), который является запросом на загрузку класса из jar. Я бы порекомендовал проверить путь к классам и конфигурацию на сервере.

Вероятные причины (в порядке вероятности)

  1. файл jar не находится в пути к классам на сервере.
  2. Файл JAR скомпилирован с JDK, который является более новым, чем среда выполнения (хотя это должно сгенерировать другое исключение).
  3. Некоторый JAR-файл, от которого зависит класс, отсутствует или имеет неправильную версию. (это должно привести к другому имени класса в исключении, так что это маловероятно.)
  4. dll для собственной части файла jar отсутствует или имеет неправильную архитектуру. (Редко)

Предполагая, что файл JAR находится на сервере, я бы порекомендовал проверить инициализацию, при которой выполняется вызов JPype startJVM, чтобы убедиться, что путь к банке был правильным. Можно также проверить загруженный путь к классу, используя print(jpype.java.lang.System.getProperty('java.class.path')), чтобы увидеть, есть ли разница между вашим локальным и серверным компьютером.

...